在编程时,使用链式赋值语句是在正常不过的了。如
var a = b = c = '';
这样可以使得代码更加简洁。
但是,如果使用下面的代码呢?
var a = b = [];
先申明相关空数组,然后开始数据操作
a.push(1);
console.log(a,b);
输出的结果,很是让我诧异,因为a和b是完全一样的。
于是我又试了如下代码:
var a = b = [];
b.push(1);
console.log(a,b);
a和b还是一样的。
难道js不能这样赋值么?继续测试
var a = b = 0;
a=1;
console.log(a,b);
b=2;
console.log(a,b);
a和b是不一样的,第一次输出1,0,第二次输出1,2
我猜想是因为js原型链的原因,
代码的执行顺序如下:
var a,b;
b = new Array();
a = b;
因此,a和b有相同的原型链,因此调用push方法的时候,触发了原型链。
再继续测试:
var a = b = [];
a = [1];
console.log(a,b);
此时输出:[1],[]