什么是 javascript 中的数组文字表示法,什么时候应该使用它?

IT技术 javascript arrays jslint literals
2021-01-28 15:12:06

JSLint 给了我这个错误:

第 11 行字符 33 的问题:使用数组文字表示法 []。

var myArray = new Array();

什么是数组文字表示法,为什么要我使用它?

它在这里显示new Array();应该可以正常工作......有什么我遗漏的吗?

4个回答

数组文字表示法是您仅使用空括号定义新数组的地方。在你的例子中:

var myArray = [];

这是定义数组的“新”方式,我想它更短/更干净。

下面的例子解释了它们之间的区别:

var a = [],            // these are the same
    b = new Array(),   // a and b are arrays with length 0

    c = ['foo', 'bar'],           // these are the same
    d = new Array('foo', 'bar'),  // c and d are arrays with 2 strings

    // these are different:
    e = [3],             // e.length == 1, e[0] == 3
    f = new Array(3);   // f.length == 3, f[0] == undefined

参考在声明 JavaScript 数组时,“Array()”和“[]”之间有什么区别?

但是答案并没有解释什么时候应该使用文字 ie[] 以及什么时候使用 new Array();
2021-03-17 15:12:06
对于那些使用 TypeScript 的人来说,等效的是var a: string[] = [];.
2021-03-18 15:12:06
始终使用文字[]. 这样做更好的原因是它更安全,因为有人可能会覆盖window.Array构造函数而不是文字。
2021-03-28 15:12:06
这是“新”的方式……没有双关语吗?
2021-04-03 15:12:06

另请参阅:var x = new Array() 有什么问题;

除了 Crockford 的论点,我相信这也是因为其他语言具有相似的数据结构,恰好使用相同的语法;例如,Python 有列表和字典请参阅以下示例:

// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]

// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}

Python 在语法上也是正确的 Javascript,这不是很好吗?(是的,缺少结尾的分号,但 Javascript 也不需要这些分号)

因此,通过在编程中重用通用范式,我们可以使每个人不必重新学习不应该重新学习的东西。

感谢您的解释。很好的答案!
2021-03-28 15:12:06

除了 Crockford 的论点,jsPerf 说它更快。http://jsperf.com/new-vs-literal-array-declaration

查看@ecMode jsperf 后,我做了一些进一步的测试。

当使用 push 添加到数组 new Array() 在 Chrome 上要快得多:

http://jsperf.com/new-vs-literal-array-declaration/2

使用索引添加 [] 稍微快一些。