按照惯例,据我所知
- 原始数据类型在按值传递和
下工作- 复杂数据类型在按引用传递
下工作
如果是这样
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。
- 为什么它返回不同的数组值?
醇>
另一种情况
var ary = [1,2,3];
var dupAry = ary;
//No I gonna apply splice method to the ary.
ary.splice(0,1);
现在两个数组都返回相同的值,并且它的标准工作正常。
- 最后为什么它没有应用第一个场景?
醇>
答案 0 :(得分:3)
var dupAry = ary;
这会为ary
指向dupAry
的数组指定引用。 ary
和dupAry
现在都包含指向同一数组对象的引用。如果您现在将其他内容分配给ary
,则dupAry
将继续保留指向数组对象的引用,ary
现在将保留其他值。
通过为变量赋值,您不会修改变量已经存在的对象;你正在修改变量所持有的对象引用。
ary.splice(0,1)
这会修改两个变量指向的实际对象,因此两者都会看到更改。
答案 1 :(得分:1)
执行此操作时:
ary = [3,4,5];
...你没有改变一个数组:你正在破坏以前的引用并用一个全新的数组创建一个全新的变量*。看到差异:
ary.push(99);
(*)嗯,当然不是一个新的变量 - 我不知道怎么说出来。