Javascript数组奇怪的行为

时间:2016-08-11 07:51:19

标签: javascript arrays

按照惯例,据我所知

  
      
  • 原始数据类型在按值传递和
  • 下工作   
  • 复杂数据类型在按引用传递
  • 下工作   

如果是这样

var ary = [1,2,3];
var dupAry = ary;
//Now I am going to rewrite the ary variable as follows
ary = [3,4,5];

现在我记录了ary和dupAry的值,它记录了不同的值。根据它的标准,两个数组都应该返回vaues。

  
      
  1. 为什么它返回不同的数组值?
  2.   

另一种情况

    var ary = [1,2,3];
    var dupAry = ary;
    //No I gonna apply splice method to the ary.
    ary.splice(0,1);

现在两个数组都返回相同的值,并且它的标准工作正常。

  
      
  1. 最后为什么它没有应用第一个场景?
  2.   

2 个答案:

答案 0 :(得分:3)

var dupAry = ary;

这会为ary指向dupAry的数组指定引用。 arydupAry现在都包含指向同一数组对象的引用。如果您现在将其他内容分配给ary,则dupAry将继续保留指向数组对象的引用,ary现在将保留其他值。

通过为变量赋值,您不会修改变量已经存在的对象;你正在修改变量所持有的对象引用。

ary.splice(0,1)

这会修改两个变量指向的实际对象,因此两者都会看到更改。

答案 1 :(得分:1)

执行此操作时:

ary = [3,4,5];

...你没有改变一个数组:你正在破坏以前的引用并用一个全新的数组创建一个全新的变量*。看到差异:

ary.push(99);

(*)嗯,当然不是一个新的变量 - 我不知道怎么说出来。