【JavaScript】Number(2) 和 Object(2) 的区别
【本篇博客由AI生成】
在JavaScript中,Number(2)
和Object(2)
的行为和结果有显著区别:
1. 类型与返回值
-
Number(2)
:
直接调用Number
函数(非构造函数模式),会将参数转换为原始数值(primitive number)。- 返回值类型为
number
,值为2
。 - 示例:
typeof Number(2) === "number"
,结果为true
。
- 返回值类型为
-
Object(2)
:
调用Object
构造函数时,若参数是原始值,会将其包装为对应的对象。- 返回值类型为
object
(具体是Number
对象实例),值为Number {2}
。 - 示例:
Object(2) instanceof Number
,结果为true
。
- 返回值类型为
2. 比较与运算
-
严格相等性(
===
):Number(2) === 2; // true(原始值比较) Object(2) === 2; // false(对象与原始值比较)
-
运算时的隐式转换:
对象会通过valueOf()
转换为原始值后参与运算:Number(2) + 3; // 5 Object(2) + 3; // 5(等价于 2 + 3)
3. 属性操作
-
原始值无法添加属性:
const num = Number(2); num.foo = "bar"; console.log(num.foo); // undefined
-
对象可以添加属性:
const obj = Object(2); obj.foo = "bar"; console.log(obj.foo); // "bar"
4. 构造函数与new
new Number(2)
:
与Object(2)
效果相同,均返回Number
对象实例。new Number(2) === Object(2); // false(不同实例) new Number(2).valueOf() === Object(2).valueOf(); // true(值相同)
总结表
特性 | Number(2) |
Object(2) |
---|---|---|
返回值类型 | number (原始值) |
object (Number对象) |
严格等于原始值 | true (如 === 2 ) |
false |
添加属性 | 无效(原始值无属性) | 有效(对象可扩展属性) |
构造函数调用 | new Number(2) 生成对象 |
直接生成对象 |
结论:
Number(2)
生成原始数值,适用于单纯的值计算;Object(2)
生成对象,可用于需要封装或扩展属性的场景。两者应根据需求选择使用。