我刚刚开始考虑这个问题,但是在jsFiddle中乱窜时无法让自己暴露出来.
var a = new Array(1),
b = Array(1);
console.log(a, b);
Run Code Online (Sandbox Code Playgroud)
输出是两个具有一个未定义成员的数组.
做一个for ( in )揭示他们有相同的属性.
这些有什么区别?第一个是否只是显式地实例化对象?
请不要告诉我使用数组文字表示法,因为我已经知道了.我更希望在上面解释的知识中填补这个空白.
Jon*_*ski 38
有Array,两者都是等价的.在new当它作为函数调用注入:
15.4.1
Array构造函数称为函数当
Array作为函数而不是构造函数调用时,它会创建并初始化一个新的Array对象.因此,函数调用Array(…)等效于new Array(…)具有相同参数的对象创建表达式.
来自ECMA-262,第3版(与第5版类似).
区别在于Array函数的实现。对没有 new 运算符的 Array 的调用是否会返回 Array 的实例取决于实现。例如 Mozilla 的 SpiderMonkey 引擎就是这样做的:
static JSBool
Array(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
{
jsuint length;
jsval *vector;
/* If called without new, replace obj with a new Array object. */
Run Code Online (Sandbox Code Playgroud)
这是来自实际来源的实际评论。下一行代码不在此处复制。我想其他引擎也会这样做。否则行为是未定义的。关于这个主题的一个很好的读物是 John Resig在这里的帖子。
根据Javascript:The Definitive Guide(第5版),第602页,"当Array()构造函数被调用为函数时,没有new运算符,它的行为与使用new运算符调用时的行为完全相同."