为什么当我执行此创建新 Number 对象的 JavaScript 语句(使用 new 运算符)时,结果在 Chrome 和 FireFox 中不同?
Why when I perform this JavaScript statment that create a new Number object (using the new operator) the result is different in Chrome and FireFox?
我是 JavaScript 的新手,我有以下疑问:我正在对 内置函数构造函数 概念进行一些实验。
所以我尝试使用 new 运算符构建一个新的 Number 对象。
如果我打开 Chrome 开发人员工具,并在 控制台 中执行此语句:
var a = new Number(3);
undefined
a;
Number {[[PrimitiveValue]]: 3}
正如您首先看到的,我使用 new 运算符创建了一个新的 Number 对象,然后执行该对象并获得了它值:数字{[[PrimitiveValue]]:3}
问题是,如果我在 FireBug 中对 FireFox 做同样的事情,我会得到不同的东西,我会得到这个:
var a = new Number(3);
undefined
a;
Number {}
所以,使用 FireFox,做同样的事情,似乎创建了 Number 对象,但是这个对象是空的并且不不包含在 Chrome.
中完成的 3 值
为什么?这怎么可能?我错过了什么?
另一个疑问与之前对象创建的具体工作方式有关,当我执行时:
var a = new Number(3);
好的,我正在使用 函数结构 概念关联到 new 运算符。据我所知(但如果我做错了断言,请纠正我),当我使用 new 运算符执行函数时,会发生:
创建了一个新的空对象。所以在这种情况下,它创建了一个新的 Number 对象,它应该意味着一个 JavaScript 对象,该对象将 proto 变量设置为引用Number 对象的,因此该对象可以访问为 Number 定义的所有方法(遵循 [=103= 实现的原型继承概念) ]).
放入该函数执行上下文的this变量设置为新创建对象的引用
参数用于设置对象属性。所以在这种情况下,该值将为 3.
为什么我这样做:
var a = new Number(3);
我获得了undefined值?这可能取决于这个 Number 函数没有 return 任何值的事实?
是我的推理正确还是我遗漏了什么?
对象在控制台中的显示方式是 implementation-specific。虽然 Chrome 揭示了数字的值,但这与实际对象本身无关,而是 Chrome 如何将其吐出。
您会注意到,在这两种情况下,a.valueOf()
将 return 3
。
顺便说一句,IE 显示:[object Number] {}
因为 Niet 已经以不同的方式回答了不同的控制台实现。
你的这部分断言是错误的
It is created a new empty object. So in this case it is created a new
Number object that should means a JavaScript object that have the
proto variable setted to the reference of the Number object, so this
object will have access to all the methods deffined for Number
__proto__
(non-standard) 将设置为 Number.prototype
而不是 Number
。
我是 JavaScript 的新手,我有以下疑问:我正在对 内置函数构造函数 概念进行一些实验。
所以我尝试使用 new 运算符构建一个新的 Number 对象。
如果我打开 Chrome 开发人员工具,并在 控制台 中执行此语句:
var a = new Number(3);
undefined
a;
Number {[[PrimitiveValue]]: 3}
正如您首先看到的,我使用 new 运算符创建了一个新的 Number 对象,然后执行该对象并获得了它值:数字{[[PrimitiveValue]]:3}
问题是,如果我在 FireBug 中对 FireFox 做同样的事情,我会得到不同的东西,我会得到这个:
var a = new Number(3);
undefined
a;
Number {}
所以,使用 FireFox,做同样的事情,似乎创建了 Number 对象,但是这个对象是空的并且不不包含在 Chrome.
中完成的 3 值为什么?这怎么可能?我错过了什么?
另一个疑问与之前对象创建的具体工作方式有关,当我执行时:
var a = new Number(3);
好的,我正在使用 函数结构 概念关联到 new 运算符。据我所知(但如果我做错了断言,请纠正我),当我使用 new 运算符执行函数时,会发生:
创建了一个新的空对象。所以在这种情况下,它创建了一个新的 Number 对象,它应该意味着一个 JavaScript 对象,该对象将 proto 变量设置为引用Number 对象的,因此该对象可以访问为 Number 定义的所有方法(遵循 [=103= 实现的原型继承概念) ]).
放入该函数执行上下文的this变量设置为新创建对象的引用
参数用于设置对象属性。所以在这种情况下,该值将为 3.
为什么我这样做:
var a = new Number(3);
我获得了undefined值?这可能取决于这个 Number 函数没有 return 任何值的事实?
是我的推理正确还是我遗漏了什么?
对象在控制台中的显示方式是 implementation-specific。虽然 Chrome 揭示了数字的值,但这与实际对象本身无关,而是 Chrome 如何将其吐出。
您会注意到,在这两种情况下,a.valueOf()
将 return 3
。
顺便说一句,IE 显示:[object Number] {}
因为 Niet 已经以不同的方式回答了不同的控制台实现。
你的这部分断言是错误的
It is created a new empty object. So in this case it is created a new Number object that should means a JavaScript object that have the proto variable setted to the reference of the Number object, so this object will have access to all the methods deffined for Number
__proto__
(non-standard) 将设置为 Number.prototype
而不是 Number
。