js数组初始化两种方法的区别

charmfocus 发布于 2014/08/06 07:40
阅读 16K+
收藏 0
var arr = [1,2,3]; var arr2 = new Array([1,2,3]);var arr2 = new Array(1,2,3);
加载中
1
charmfocus
charmfocus

引用来自“fxhover”的评论

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

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

charmfocus
charmfocus
回复 @con : 经再次测试,验证两种方法都是一样的,之前出现的问题,是由别的原因引起的。 问题:当var a = []; var b = a; b.push(2);这时a值也变,说明js的赋值操作是引用赋值。 由于这个原因,我在做递归函数时,原以为 b就为新的变量,不会引起a的变化,但却引起了a的变化,产生了死循环
con
con
楼主怎么测出区别的,代码看看
0
fxhover
fxhover
这两种方式是一样的,没什么区别,一种直接定义,一种是通过JavaScript的内置对象来定义。
0
Arrowing
Arrowing

第二个写错了,应该是:

new Array(1,2,3);

charmfocus
charmfocus
0
Tuesday
Tuesday
类型上有区别, 第一个是json. 第二个才是array
Tuesday
Tuesday
回复 @lazyboy : echo json_encode(array(1,2,3)); 谁逗谁呢?
lazyboy
lazyboy
你这是在逗我们么?先理解json的概念吧
Arrowing
Arrowing
我读的书少,别逗我。
0
nswish
nswish

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

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

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

当传入参数是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]

返回顶部
顶部