在JavaScript中创建一个Array实例总是需要使用new吗?

时间:2012-10-24 10:35:04

标签: javascript arrays

  

可能重复:
  What are the best practices to follow when declaring an array in Javascript?

使用 [] 定义变量后,不使用新数组是否正确?

var v = [];
v = Array(5); // is new necessary?

7 个答案:

答案 0 :(得分:0)

第一行创建一个空数组。

第二个创建一个包含5个元素的数组,所有元素都具有值undefined

使用两者 是没有意义的。使用哪一个取决于你想要做什么,但在实践中不经常遇到第二种形式。很可能第一个就是你需要的全部。

答案 1 :(得分:0)

您将v的值从零长度数组重新分配给长度为5的数组。这会使=[]部分变为冗余。

编辑:

这里的主要区别是可以修改Array构造函数的原型,因此最终得到的结果不一定与标准问题javascript数组相同。

使用[]分配时,使用内部构造函数,这意味着数组原型篡改不会影响新对象。例如,我可以设置Array.prototype.join=function(){alert("duh");},当您尝试调用join方法时,使用new Array(...)构造的所有数组都将提醒“duh”。使用[]分配的数组对此免疫。

答案 2 :(得分:0)

不,没有必要,因为两者都做同样的事情。基本上你应该做的就是:

var v=[];  or var v=[value1, value2 ...];

定义数组的第二个版本有一些问题,如:

Array(4) ==>创建一个空的4元素数组

Array(4,5) ==>创建一个包含2个元素(4和5)的数组

因此,如果你想创建一个1元素数组,它会在你脸上爆炸。因此,建议使用第一个版本。

答案 3 :(得分:0)

简单的答案是,在声明中使用Array关键字几乎没有充分理由,无论是:

var a = Array(n)

var a = new Array(n)

只需使用:

var a = [];

代替。

请参阅https://stackoverflow.com/a/11500550/6782

答案 4 :(得分:0)

没有必要将new与Array一起使用,我认为你可以在不使用new运算符的情况下创建数组

答案 5 :(得分:0)

您正在创建两个Array个对象并丢弃一个,因此您无需执行任何操作。

声明变量并创建一个数组:

var v;
v = new Array(5);

或者作为单一陈述:

var v = new Array(5);

创建数组的首选方法是在要指定大小时使用new Array,在要从项目创建数组时使用数组文字:

var a1 = new Array(42); // creates an array with 42 undefined items
var a2 = [1, 2, 3]; // creates an array with the 3 items

对于零大小的数组,您可以使用:

var a1 = new Array(); // creates an empty array
var a2 = []; // creates an empty array

Array构造函数也可以获取项目列表,但是应该避免使用该项目,因为如果有一个项目并且该项目是数字的话,它的行为会有所不同:

var a1 = new Array(100, 101, 102); // creates an array with three items
var a2 = new Array(100, 101); // creates an array with two items
var a3 = new Array(100); // creates an array with 100 undefined items

答案 6 :(得分:-1)

JavaScript - 与大多数语言不同 - 为您提供在需要时自我扩展的数组。但这并不意味着它没有成本。

如果你有一个长度为N的数组并且在索引M> = N处放置一些东西,它必须创建一个长度为M-1的新数组,将N中的所有内容复制到其中然后添加你的元素,那很慢。 请注意,JavaScript具有非常多样化的实现,有些人只是将数组视为具有特殊长度属性的普通对象。

为了避免这种情况,当您知道数组的大小而不是它的大小时,您可以使用new Array( size )。如果你知道它将包含什么,最好使用文字符号[ item1, item2 ]。如果你真的不知道,只需要[]

<强>加入