JS Array(3) 不等价于 [undefined, undefined, undefined]?

var array = new Array(3);
var array1 = [undefined, undefined, undefined];

console.log(array);  //[]
console.log(array1); //[undefined, undefined, undefined]

console.log(array.toString()); //,,
console.log(array1.toString()); //,,

array.forEach(function(item){console.log(item)}); //nothing output
array1.forEach(function(item){console.log(item)}); //undefined 3 times

for (i=0;i<array.length;i++){console.log(array[i])} //undefined 3 times
for (i=0;i<array1.length;i++){console.log(array1[i])} //undefined 3 times

for (i in array){console.log(array[i])}  //onthing output
for (i in array1){console.log(array1[i])} //undefined 3 times

多谢解答
new Array(3) 等价于下面的定义

var array2 = [];
array2.length = 3;
阅读 4.3k
3 个回答

菜鸟也来答一答

1,首先undefined是javascript中得一种类型.

var array1=[undefined, undefined, undefined];

var array1=[1, 1, 1];
是一样的表示array1中都有3个元素。

而var array=new Array(3);只是创建了一个length为3的数组但是里面为空。

2,来看forEach方法

  forEach方法:接受一个回调函数作为唯一的参数,然后将对象中的每一个元素(按照文档中的顺序)调用回调函数。
  结合1点的内容测试一段代码
  var testAr=[1,2,3];//创建一个数组
  testAr.length=5;//将数组大小变为 5,但是4,5的位置并没有元素而是一段空
  testAr[4]=undefined;
  testAr.forEach(function(item){console.log(item)})//1,2,3,undefined

3,再来看看for in方法
//先吃饭

new Array(3),只是创建了一个长度为3的数组,没有任何值。
而你上面的Array1,每个位置都是有值的,是undefined。

关键在于这是数组,就算你会数组的每一个位置相等,但是它的引用不同就是不同的对象就会不相等。就像:

var a = [1, 2];
var b = [1, 2];
console.log(a == b); //输出false
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题