JSLint给我这个错误:
第11行的字符33处的问题:使用数组文字符号[]。
var myArray = new Array();
什么是数组文字符号?为什么要我改用它?
它显示这里new Array();
应该可以正常工作...我缺少什么吗?
JSLint给我这个错误:
第11行的字符33处的问题:使用数组文字符号[]。
var myArray = new Array();
什么是数组文字符号?为什么要我改用它?
它显示这里new Array();
应该可以正常工作...我缺少什么吗?
Answers:
数组文字表示法是您仅使用空括号定义新数组的地方。在您的示例中:
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
[]
。这样做更好的原因是它更安全,因为有人可能会覆盖window.Array
构造函数,但不能覆盖文字。
var a: string[] = [];
。
另请参阅: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在语法上也是正确的Java脚本不是很整洁吗?(是的,缺少结尾的分号,但是对于Javascript来说也不是必需的)
因此,通过在编程中重用常见的范式,我们使每个人都不必重新学习不必要的知识。
除了Crockford的论点之外,jsPerf还说它更快。http://jsperf.com/new-vs-literal-array-declaration
看完@ecMode jsperf之后,我做了一些进一步的测试。
当使用推添加到数组中时,新的Array()在Chrome上的速度要快得多:
http://jsperf.com/new-vs-literal-array-declaration/2
对于[],使用索引添加会稍微快一些。