我已经在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)?
看来第一个例子
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可以运行。 问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。