我已经在Firefox-3.5.7 / Firebug-1.5.3和Firefox-3.6.16 / Firebug-1.6.2中观察到了这一点
当我启动Firebug时:
var x = new Array(3) console.log(x) // [undefined, undefined, undefined] var y = [undefined, undefined, undefined] console.log(y) // [undefined, undefined, undefined] console.log( x.constructor == y.constructor) // true console.log( x.map(function() { return 0; }) ) // [undefined, undefined, undefined] console.log( y.map(function() { return 0; }) ) // [0, 0, 0]
这里发生了什么?这是一个错误,还是我误会了如何使用new Array(3)?
new Array(3)
看来第一个例子
x = new Array(3);
用未定义的指针创建一个数组。
第二个对象创建一个带有指向3个未定义对象的指针的数组,在这种情况下,它们自身的指针不是未定义的,只有它们指向的对象才是未定义的。
y = [undefined, undefined, undefined] // The following is not equivalent to the above, it's the same as new Array(3) y = [,,,];
由于map是在数组中对象的上下文中运行的,因此我相信第一个map根本无法运行该函数,而第二个map可以运行。