Javascript 分配;“新号码”;在Chrome中将字段打印原型设置为{}
我正在尝试下面的JavaScript示例Javascript 分配;“新号码”;在Chrome中将字段打印原型设置为{},javascript,google-chrome,console.log,Javascript,Google Chrome,Console.log,我正在尝试下面的JavaScript示例 function A() {}; A.prototype.x = new Number(10); var a = new A(); console.log(a.x); 在Firefox中,其打印值为10,但在Chrome或Node.js中,其打印值为{} 但当改变第二行如下,然后它打印10在铬也 A.prototype.x = 10; 有人能解释一下为什么新数字(10)不能在chrome中使用。新数字(…)创建一个装箱数字实例,它与数字原语不同
function A() {};
A.prototype.x = new Number(10);
var a = new A();
console.log(a.x);
在Firefox中,其打印值为10,但在Chrome或Node.js中,其打印值为{}
但当改变第二行如下,然后它打印10在铬也
A.prototype.x = 10;
有人能解释一下为什么新数字(10)不能在chrome中使用。新数字(…)
创建一个装箱数字实例,它与数字原语不同。Chrome的控制台将其显示为一个对象 如果您编写
console.log(新编号(10))
,您将看到相同的输出
如果您将代码更改为使用原语(a.prototype.x=10
),它将显示10
新编号(…)
创建一个装箱编号实例,该实例与编号原语不同。Chrome的控制台将其显示为一个对象 如果您编写
console.log(新编号(10))
,您将看到相同的输出
如果您将代码更改为使用原语(
a.prototype.x=10
),它将显示10
,因为数字是一个对象<代码>控制台.log(a.x.valueOf())或console.log(a.x.toString())代码>将起作用。因为数字是一个对象<代码>控制台.log(a.x.valueOf())
或console.log(a.x.toString())代码>将起作用。这是因为您正在生成一个数字包装对象而不是一个原语,这是Chrome选择的表示形式。(控制台表示并不总是相同的。没有标准。)
实际数字10
存储在名为[[PrimitiveValue]]
的内部属性中,因此它不会直接公开
要获取其[[PrimitiveValue]]
,可以使用.valueOf()
方法
console.log(a.x.valueOf()); // 10
新建对象的[[Prototype]]
内部属性设置为原始数字Prototype对象,即数字Prototype的初始值(15.7.3.1)
新构造对象的[[Class]]
内部属性设置为“Number”
新构造对象的[[PrimitiveValue]]
内部属性设置为ToNumber(value)
如果提供了值,则设置为+0
新构造对象的[[Extensible]]
内部属性设置为true
这是因为你正在制作一个数字包装器对象而不是一个原语,这是Chrome选择的表示形式。(控制台表示并不总是相同的。没有标准。)
实际数字10
存储在名为[[PrimitiveValue]]
的内部属性中,因此它不会直接公开
要获取其[[PrimitiveValue]]
,可以使用.valueOf()
方法
console.log(a.x.valueOf()); // 10
新建对象的[[Prototype]]
内部属性设置为原始数字Prototype对象,即数字Prototype的初始值(15.7.3.1)
新构造对象的[[Class]]
内部属性设置为“Number”
新构造对象的[[PrimitiveValue]]
内部属性设置为ToNumber(value)
如果提供了值,则设置为+0
新构造对象的[[Extensible]]
内部属性设置为true
console.log
再次获胜:与console.log(“+a.x)
比较console.log
再次获胜:与console.log(“+a.x)
比较。