什么是JavaScript中的数组文字符号,何时使用它?

时间:2009-07-07 20:36:59

标签: javascript arrays jslint literals

JSLint给了我这个错误:

  

第11行第33个问题:使用数组文字符号[]。

var myArray = new Array();

什么是数组文字符号?为什么要让我使用它呢?

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

4 个答案:

答案 0 :(得分:89)

数组文字表示法是使用空括号定义新数组的位置。在您的示例中:

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
  

参考What’s the difference between “Array()” and “[]” while declaring a JavaScript array?

答案 1 :(得分:22)

另请参阅:What’s wrong with var x = new Array();

除了Crockford论点之外,我相信这也是因为其他语言具有类似的数据结构,恰好使用相同的语法;例如,Python has lists and dictionaries;请参阅以下示例:

// 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也不需要那些)

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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

使用push添加到数组时,Chrome上的新Array()速度要快得多:

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

对于[],使用索引添加稍快一些。