5
回答
js数组初始化两种方法的区别
终于搞明白,存储TCO原来是这样算的>>>   
var arr = [1,2,3]; var arr2 = new Array([1,2,3]);var arr2 = new Array(1,2,3);
<无标签>
举报
91tel
发帖于3年前 5回/15K+阅
共有5个答案 最后回答: 3年前

引用来自“fxhover”的评论

这两种方式是一样的,没什么区别,一种直接定义,一种是通过JavaScript的内置对象来定义。

经测试,还是有些区别,var arr = [1,2,3];这种方式和new Array(1,2,3)区别是第一个方法是地址引用的,在递归处理var arr时,变量不重新初始化,而是直接使用arr,用new方式则是新申请内存空间,每层递归处理数据则不同

--- 共有 2 条评论 ---
91tel回复 @con : 经再次测试,验证两种方法都是一样的,之前出现的问题,是由别的原因引起的。 问题:当var a = []; var b = a; b.push(2);这时a值也变,说明js的赋值操作是引用赋值。 由于这个原因,我在做递归函数时,原以为 b就为新的变量,不会引起a的变化,但却引起了a的变化,产生了死循环 3年前 回复
con楼主怎么测出区别的,代码看看 3年前 回复

没有差别。第一种是以“字面量表达式”的方式创建数组,第二种则是以“构造函数”的方式创建数组。

他们的执行结果都是得到一个数组。

需要注意的一点是,数组的构造函数对于不同数量的传入参数,有不同的行为。

当传入参数是0个的时候,返回一个空数组,等价与[]。

当传入参数是1个且参数类型是数字的时候(例如参数是n),返回一个具有n个undefined元素的数组。

当传入参数是1个且参数类型不是数字的时候(例如参数是'A'),返回一个具有1个元素,且元素值是参数的数组。

当传入参数大于1个的时候,返回元素是参数的数组。

----------------------------------------------------------------------------

new Array() //=>  []

new Array(3) //=> [undefined, undefined, undefined]

new Array('A') //=> ['A']

new Array(1, 2, 3) //=> [1, 2, 3]

顶部