我们知道在 js 中可以通过 Array 构造函数创建一个数组 :
var arr = new Array();
当我们通过在构造函数传入一个整数,就会创建 length 为对应数值的数组:
var arr = new Array(10); // 创建一个长度为 10 的数组
当我们传递的是其他类型的的参数,会创建包含那个值的只有一项的数组:
var arr = new Array("10"); // 创建一个包含 1 项,即字符串"10"的数组
好奇之下传入一个浮点小数:
var arr = new Array(10.0);
console.log(arr);
结果输出 [undefined × 10]
,这是为什么?数组里面的内容是什么意思?
1
davedavehong 2016-10-15 12:23:41 +08:00
10.0 会被转换成 10 ,实际效果和 new Array(10);效果一样
|
2
xxxyyy 2016-10-15 12:30:17 +08:00 via Android
[undefined x 10] 应该是你在 chrome 的控制台看到的吧,如果在 Firefox 的 控制台可能直接显示 [undefined, undefined, ...] 等 10 个 undefined 。也就是说这里是 创建 10 个元素的数组的意思,这是由于在 js 中 10.0 跟 10 是一样的。
|
3
lijsh 2016-10-15 12:42:34 +08:00
new Array(10) 返回的不也是[undefined × 10] 吗?
这里面有个大坑,这样创建的数组(包括仅设置 length 的数组),直接用 forEach 方法是迭代不了的。只能用 for in 数组 length 的方法。 |
5
sherlocktheplant 2016-10-15 13:27:40 +08:00
@lijsh
果然是这样 学到了 测试了一下 map/reduce/forEach/every/some 都无法遍历到 undefined 的元素 但是 find 和 for(var i = 0; i < arr.length;i++)循环可以 |
6
sherlocktheplant 2016-10-15 13:58:35 +08:00
@lijsh 试了一下 underscore 和 lodash 好像都可以正常遍历
|
7
L3au 2016-10-15 13:58:53 +08:00
|
8
SuperMild 2016-10-15 14:37:16 +08:00
对于 JS 来说,新建数组时指定数组长度貌似意义不大,多数情况下直接建个空数组就可以了。
|