空白数组返回长度为5

时间:2016-06-02 20:12:20

标签: javascript arrays reference-type

我一直在观看由Mark Zamoyta撰写的PluralSight的快速JavaScript培训,我偶然发现了这一点。他展示了这两个例子。我一直试图绕过它,但仍然无法理解。

在使用new Array()方法创建数组后,如何能够捕获条目的长度,看到它返回了一个空白数组[]。如果它像[]一样空白,是否应该返回-1

  var entries = [1,2,3,4,5];
  entries.length
  => 5
  entries
  => [ 1, 2, 3, 4, 5 ]

  var entries = new Array(5);
  entries.length
  => 5
  entries
  => []

2 个答案:

答案 0 :(得分:1)

JS中数组的length属性不是即时计算的 - 它也可以通过构造函数或赋值手动设置,并在添加或删除对象时更新({ {3}}):

  

具体来说,每当添加名称为数组索引的属性时,如果需要,将更改length属性,使其大于该数组索引的数值[。]

这是一个不断更新的普通房产,而不是计算。使用构造函数new Array(5)初始化一个数组,length设置为5。您也可以手动设置它,填充undefined或根据需要截断数组:

var arr = [];
arr.length = 3;
// arr is now [undefined, undefined, undefined]

答案 1 :(得分:1)

var myArray = new Array(5);

通过将构造函数传递给上面的整数来定义数组时,将为数组中的5个插槽分配内存。如果检查数组,您会发现:

console.log(myArray[1]);
=> undefined
console.log(myArray.toString);
=> ,,,,

如您所见,数组中确实有五个元素,每个元素都是undefined。所以你的数组不是空白。"

以这种方式初始化数组可能是不好的做法,因为它没有一个很好的用例。推送到阵列将产生:

myArray.push("value");
console.log(myArray.toString);
=> ,,,,,value

......这绝不是你想要的。我建议像下面那样初始化数组并忘记将整数传递给构造函数甚至是一个选项:

var myArray = [];