V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
oliver34
V2EX  ›  JavaScript

js,新建数组问题

  •  
  •   oliver34 · 2016-10-15 11:53:03 +08:00 · 2612 次点击
    这是一个创建于 2965 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2016-10-16 14:25:59 +08:00
    davedavehong
        1
    davedavehong  
       2016-10-15 12:23:41 +08:00
    10.0 会被转换成 10 ,实际效果和 new Array(10);效果一样
    xxxyyy
        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 是一样的。
    lijsh
        3
    lijsh  
       2016-10-15 12:42:34 +08:00
    new Array(10) 返回的不也是[undefined × 10] 吗?

    这里面有个大坑,这样创建的数组(包括仅设置 length 的数组),直接用 forEach 方法是迭代不了的。只能用 for in 数组 length 的方法。
    oliver34
        4
    oliver34  
    OP
       2016-10-15 13:04:50 +08:00
    @lijsh 哦,原来是这个意思,明白了,看到 undefinedX10 一下子没明白是什么
    sherlocktheplant
        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++)循环可以
    sherlocktheplant
        6
    sherlocktheplant  
       2016-10-15 13:58:35 +08:00
    @lijsh 试了一下 underscore 和 lodash 好像都可以正常遍历
    SuperMild
        8
    SuperMild  
       2016-10-15 14:37:16 +08:00
    对于 JS 来说,新建数组时指定数组长度貌似意义不大,多数情况下直接建个空数组就可以了。
    mingyun
        9
    mingyun  
       2016-10-16 14:25:59 +08:00
    @L3au 学习了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3535 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:55 · PVG 18:55 · LAX 02:55 · JFK 05:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.