声明 JavaScript 数组时,“Array()”和“[]”有什么区别?
2022-08-29 22:12:30
像这样声明数组的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
像这样声明数组的真正区别是什么:
var myArray = new Array();
和
var myArray = [];
有区别,但该示例中没有区别。
使用更冗长的方法:参数中确实有一个额外的选项:如果将一个数字传递给构造函数,你会得到一个长度的数组:new Array()
x = new Array(5);
alert(x.length); // 5
为了说明创建数组的不同方法:
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
;
另一个区别是,使用时,您可以设置数组的大小,这会影响堆栈大小。如果您遇到堆栈溢出(Array.push 与 Array.unshift 的性能),这将非常有用,这是当数组的大小超过堆栈大小时发生的情况,并且必须重新创建它。因此,根据用例的不同,使用时实际上可以提高性能,因为您可以防止溢出发生。new Array()
new Array()
正如本答案中所指出的,实际上不会向数组中添加五个项目。它只是为五个项目增加了空间。请注意,使用这种方式很难依赖它进行计算。new Array(5)
undefined
Array
array.length
使用隐式数组创建数组和数组构造函数之间的区别很细微,但很重要。
当您使用创建数组时
var a = [];
您告诉解释器创建一个新的运行时数组。完全不需要额外的处理。做。
如果您使用:
var a = new Array();
你告诉解释器,我想调用构造函数“”并生成一个对象。然后,它查找执行上下文以查找要调用的构造函数,并调用它,从而创建数组。Array
你可能会想:“嗯,这根本不重要。他们是一样的!不幸的是,你不能保证这一点。
举个例子:
function Array() {
this.is = 'SPARTA';
}
var a = new Array();
var b = [];
alert(a.is); // => 'SPARTA'
alert(b.is); // => undefined
a.push('Woa'); // => TypeError: a.push is not a function
b.push('Woa'); // => 1 (OK)
在上面的示例中,第一个调用将像您预期的那样提醒“SPARTA”。第二个不会。您最终会看到未定义的。您还将注意到,b 包含所有本机 Array 对象函数,例如 ,而另一个则不包含。push
虽然您可能期望发生这种情况,但它只是说明了与 不同的事实。[]
new Array()
如果您知道自己只想要一个数组,则最好只使用。我也不建议四处走动并重新定义数组...[]