一尘不染

JavaScript“ new Array(n)”和“ Array.prototype.map”怪异

javascript

我已经在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)


阅读 301

收藏
2020-04-25

共1个答案

一尘不染

看来第一个例子

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可以运行。

2020-04-25