js,新建数组问题

2016-10-15 11:53:03 +08:00
 oliver34

我们知道在 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] ,这是为什么?数组里面的内容是什么意思?

2606 次点击
所在节点    JavaScript
9 条回复
davedavehong
2016-10-15 12:23:41 +08:00
10.0 会被转换成 10 ,实际效果和 new Array(10);效果一样
xxxyyy
2016-10-15 12:30:17 +08:00
[undefined x 10] 应该是你在 chrome 的控制台看到的吧,如果在 Firefox 的 控制台可能直接显示 [undefined, undefined, ...] 等 10 个 undefined 。也就是说这里是 创建 10 个元素的数组的意思,这是由于在 js 中 10.0 跟 10 是一样的。
lijsh
2016-10-15 12:42:34 +08:00
new Array(10) 返回的不也是[undefined × 10] 吗?

这里面有个大坑,这样创建的数组(包括仅设置 length 的数组),直接用 forEach 方法是迭代不了的。只能用 for in 数组 length 的方法。
oliver34
2016-10-15 13:04:50 +08:00
@lijsh 哦,原来是这个意思,明白了,看到 undefinedX10 一下子没明白是什么
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++)循环可以
sherlocktheplant
2016-10-15 13:58:35 +08:00
@lijsh 试了一下 underscore 和 lodash 好像都可以正常遍历
L3au
2016-10-15 13:58:53 +08:00
SuperMild
2016-10-15 14:37:16 +08:00
对于 JS 来说,新建数组时指定数组长度貌似意义不大,多数情况下直接建个空数组就可以了。
mingyun
2016-10-16 14:25:59 +08:00
@L3au 学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312971

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX