为了账号安全,请及时绑定邮箱和手机立即绑定

如何在javascript中初始化数组的长度?

如何在javascript中初始化数组的长度?

万千封印 2019-08-06 13:48:24
如何在javascript中初始化数组的长度?我在JavaScript中使用数组(包括w3schools和devguru)阅读的大多数教程都建议您可以使用var test = new Array(4);语法将整数传递给Array构造函数来初始化具有一定长度的数组。在我的js文件中大量使用这种语法之后,我通过jsLint运行了一个文件,它吓坏了:错误:第1行字符22处的问题:预期')'而是看到'4'。var test = new Array(4); 第1行第23个问题:预期';' 而是看到')'。var test = new Array(4); 第1行第23个问题:预期标识符而不是')'。通过阅读jsLint对其行为的解释后,看起来jsLint并不真正喜欢new Array()语法,而是[]在声明数组时更喜欢。所以我有几个问题。首先,为什么?我是否因使用new Array()语法而冒任何风险?是否存在我应该注意的浏览器不兼容性?第二,如果我切换到方括号语法,有没有办法声明一个数组并将其长度全部设置在一行,或者我必须做这样的事情:var test = [];test.length = 4;
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

  1. 为什么要初始化长度?从理论上讲,没有必要这样做。它甚至可能导致令人困惑的行为,因为所有使用它length来查明数组是否为空的测试都会报告该数组不为空。
    一些 测试表明,如果之后填充数组,设置大型数组的初始长度可以更有效,但性能增益(如果有的话)似乎因浏览器而异。

  2. jsLint不喜欢new Array()因为构造函数不明确。

    new Array(4);

    创建一个长度为 4 的空数组但是

    new Array('4');

    创建一个包含该值 的数组'4'

关于你的评论:在JS中,你不需要初始化数组的长度。它动态增长。您可以将长度存储在某个变量中,例如

var data = [];var length = 5; // user defined lengthfor(var i = 0; i < length; i++) {
    data.push(createSomeObject());}


查看完整回答
反对 回复 2019-08-06
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

  • Array(5) 给你一个长度为5但没有值的数组,因此你不能迭代它。

  • Array.apply(null, Array(5)).map(function () {}) 给你一个长度为5且未定义为值的数组,现在它可以迭代。

  • Array.apply(null, Array(5)).map(function (x, i) { return i; }) 为您提供长度为5且值为0,1,2,3,4的数组。

  • Array(5).forEach(alert)什么都不做,Array.apply(null, Array(5)).forEach(alert)给你5个警报

  • ES6给我们Array.from所以现在你也可以使用Array.from(Array(5)).forEach(alert)

  • 如果你想用一定的值进行初始化,这些都是很好的知道...... 
    Array.from('abcde')Array.from('x'.repeat(5))
    或者Array.from({length: 5}, (v, i) => i)   // gives [0, 1, 2, 3, 4]


查看完整回答
反对 回复 2019-08-06
?
守着一只汪

TA贡献1872条经验 获得超3个赞

使用ES2015,.fill()您现在可以简单地执行:

// `n` is the size you want to initialize your array// `0` is what the array will be filled with (can be any other value)Array(n).fill(0)

这比简洁得多 Array.apply(0, new Array(n)).map(i => value)

可以0放入in .fill()并运行不带参数,这将填充数组undefined。(但是,这将在Typescript中失败


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 5833 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号