空白数组返回长度为 5
Blank Array Returned A Length of 5
我一直在观看 Mark Zamoyta 的 PluralSight 快速 JavaScript 培训,我偶然发现了这个。他展示了这两个例子。我一直在努力思考它,但仍然无法理解。
如何在使用 new Array()
方法创建数组后捕获条目的长度,看到它 return 编辑了一个空白数组 []
。如果是这样的空白[]
,不应该是return-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
=> []
JS 中数组的 length
属性 不是即时计算的——也可以通过构造函数或赋值手动设置,并随着对象的添加或删除而更新(Spec):
Specifically, whenever a property is added whose name is an array index, the length property is changed, if necessary, to be one more than the numeric value of that array index[.]
这是一个简单的 属性,它会保持最新状态,而不是计算。使用构造函数 new Array(5)
初始化一个数组,其中 length
设置为 5
。也可以手动设置,根据需要填写undefined
或者截断数组:
var arr = [];
arr.length = 3;
// arr is now [undefined, undefined, undefined]
var myArray = new Array(5);
当您像上面那样通过向构造函数传递一个整数来定义数组时,会为数组中的 5 个槽分配内存。如果检查数组,您会发现:
console.log(myArray[1]);
=> undefined
console.log(myArray.toString);
=> ,,,,
如你所见,数组中确实有五个元素,每个元素undefined
。所以你的数组不是 "blank."
以这种方式初始化数组可能是一种不好的做法,因为它没有很好的用例。推送到数组将产生:
myArray.push("value");
console.log(myArray.toString);
=> ,,,,,value
...这绝不是您想要的。我建议像下面这样初始化数组,忘记将整数传递给构造函数甚至是一个选项:
var myArray = [];
我一直在观看 Mark Zamoyta 的 PluralSight 快速 JavaScript 培训,我偶然发现了这个。他展示了这两个例子。我一直在努力思考它,但仍然无法理解。
如何在使用 new Array()
方法创建数组后捕获条目的长度,看到它 return 编辑了一个空白数组 []
。如果是这样的空白[]
,不应该是return-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
=> []
JS 中数组的 length
属性 不是即时计算的——也可以通过构造函数或赋值手动设置,并随着对象的添加或删除而更新(Spec):
Specifically, whenever a property is added whose name is an array index, the length property is changed, if necessary, to be one more than the numeric value of that array index[.]
这是一个简单的 属性,它会保持最新状态,而不是计算。使用构造函数 new Array(5)
初始化一个数组,其中 length
设置为 5
。也可以手动设置,根据需要填写undefined
或者截断数组:
var arr = [];
arr.length = 3;
// arr is now [undefined, undefined, undefined]
var myArray = new Array(5);
当您像上面那样通过向构造函数传递一个整数来定义数组时,会为数组中的 5 个槽分配内存。如果检查数组,您会发现:
console.log(myArray[1]);
=> undefined
console.log(myArray.toString);
=> ,,,,
如你所见,数组中确实有五个元素,每个元素undefined
。所以你的数组不是 "blank."
以这种方式初始化数组可能是一种不好的做法,因为它没有很好的用例。推送到数组将产生:
myArray.push("value");
console.log(myArray.toString);
=> ,,,,,value
...这绝不是您想要的。我建议像下面这样初始化数组,忘记将整数传递给构造函数甚至是一个选项:
var myArray = [];