当我需要声明一个新数组时,我使用这种表示法
var arr = new Array();
但是当在线测试时,例如在jsbin 上,一个警告提示我“使用数组文字符号 []”。
我没有找到避免使用构造函数的理由。在某种程度上比使用效率低[]
吗?或者这是不好的做法?
有充分的理由使用var arr = [];
而不是var arr = new Array();
吗?
当我需要声明一个新数组时,我使用这种表示法
var arr = new Array();
但是当在线测试时,例如在jsbin 上,一个警告提示我“使用数组文字符号 []”。
我没有找到避免使用构造函数的理由。在某种程度上比使用效率低[]
吗?或者这是不好的做法?
有充分的理由使用var arr = [];
而不是var arr = new Array();
吗?
大多数情况下,人们使用var a = []
是因为Douglas Crockford 这么说。
他的原因包括以下不直观和不一致的行为new Array()
:
var a = new Array(5); // an array pre-sized to 5 elements long
var b = new Array(5, 10); // an array with two elements in it
请注意,无法new Array()
创建一个只有一个预先指定的数字元素的数组!
使用[]
其实更高效,也更安全!可以覆盖Array
构造函数并让它做一些奇怪的事情,但你不能覆盖[]
.
就个人而言,我总是使用[]
语法,同样总是使用{}
语法代替new Object()
.
一个显著不同的是,[]
将始终实例化一个新的磁盘阵列,而new Array
可以被劫持来创建不同的对象。
(function () {
"use strict";
var foo,
bar;
//don't do this, it's a bad idea
function Array() {
alert('foo');
}
foo = new Array();
bar = [];
}());
在我的示例代码中,我已经将Array
函数从文档范围的其余部分隐藏起来,但是更有可能的是,如果您遇到此类问题,代码将不会留在一个很好的闭包中,并且会可能很难找到。
免责声明:劫持Array
构造函数不是一个好主意。
[]
数组字面量更可预测,因为大多数开发人员都使用它。大多数数组用法都将使用文字,并且让您的代码与其他开发人员使用的代码相匹配是有value的。
[]
var ns = [];
var names = [ 'john', 'brian' ];
如这里所示,使用空和几个已知元素的文字比 Array 构造函数更胖。
new Array(size)
如果大小已知,则使用 Array 构造函数可以显着提高性能。然而,这也意味着您必须处理一个已经填充了所有值的“未定义”数组。
如图所示这里
// fill an array with 100 numbers
var ns = new Array( 100 );
for ( var i = 0; i < 100; i++ ) {
ns[i] = i;
}
这也适用于非常小的数组。
不,实际上没有理由对空数组使用一种符号而不是另一种符号。
但是,大多数浏览器使用x = [];
比调用Constructor显示出稍好的性能。
如果您需要创建具有特定大小的 Array,您需要使用x = new Array(10);
例如,这将创建一个具有 10undefined
个插槽的 Array 。
定义数组或对象的最快方式是字面方式,因为您不需要调用构造函数
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];
alert(arr1[0]); // 1
alert(arr2[0]); // 1
var arr3 = new Array(200);
var arr4 = [200];
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200