为什么当我执行这个创建新Number对象的JavaScript语句时(使用new运算符),Chrome和FireFox的结果会有所不同?

And*_*ili 0 javascript javascript-objects

我是JavaScript的新手,我有以下疑问:我正在做一些内置的funcion构造函数概念的实验.

所以我试图使用new运算符构建一个新的Number对象.

如果我打开Chrome开发者工具,并在控制台中执行此声明:

var a = new Number(3);
undefined
a;
Number {[[PrimitiveValue]]: 3}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我首先使用new运算符创建一个新的Number对象,然后执行此对象并获取其值:Number {[[PrimitiveValue]]:3}

问题是,如果我在FireFox中FireBug做同样的事情,我会获得不同的东西,我得到了这个:

var a = new Number(3);
undefined
a;
Number {}
Run Code Online (Sandbox Code Playgroud)

因此,使用FireFox,做同样的事情,似乎创建了Number对象,但是这个对象是空的,并且不包含Chrome中3值.

为什么?这怎么可能?我错过了什么?

当我执行时,另一个疑问与前一个对象创建的确切工作方式有关:

var a = new Number(3);
Run Code Online (Sandbox Code Playgroud)

好的,我正在使用函数contructure concept关联到new运算符.据我所知(但如果我做错了断言,请纠正我),当我使用new运算符执行函数时会发生:

  1. 它创建了一个新的空对象.所以在这种情况下,它创建了一个新的Number对象,它应该是一个JavaScript对象,它具有设置为Number对象引用的proto变量,因此该对象可以访问为Number定义的所有方法(遵循原型继承概念)由JavaScript实现).

  2. 这个可变的推杆进入该函数的执行上下文设置好的到新创建的对象的参考.

  3. 该参数用于设置对象属性.所以在这种情况下,该值将为3.

我为什么这样做:

var a = new Number(3);
Run Code Online (Sandbox Code Playgroud)

我获得了未定义的值?这可能取决于这个Number函数不返回任何值的事实?

这是我的推理是正确的还是我错过了什么?

Nie*_*sol 5

在控制台中呈现对象的方式是特定于实现的.虽然Chrome显示了数字的价值,但这与实际对象本身无关,而是Chrome如何将其吐出来.

您会注意到在两种情况下a.valueOf()都会返回3.

另外,IE显示: [object Number] {}