js连等赋值问题
之前一直对js的连等赋值不太清除,今天特意查了一些资料,借鉴了一位大佬的博客记录一下。大佬博客地址: 千万不要在JS中使用连等赋值操作
一、“=”是怎么赋值的
第一种常规赋值语句:
这里抄的是MDN上对于 = 的示例
let x = 2;
const y = 3;
console.log(x);
// expected output: 2
console.log(x = y + 1); // 3 + 1
// expected output: 4
console.log(x = x * y); // 4 * 3
// expected output: 12
上面的代码明显看一看出来,js在赋值的时候优先将“=”右侧的进行计算,然后赋值给左侧的变量
第二种情况:
// Assuming the following variables
// x = 5
// y = 10
// z = 25
x = y // x is 10
x = y = z // x, y and z are all 25
当 x = y = z 时可能是两种情况:
- x = z,y = z
- y = z ,x = y
到底是哪种情况哪,从大佬博客里看到一种很好的测试方式
var a,b;
Object.defineProperty(window,"obj",{
get:function(){
console.log("getter!!!");
}
});
a=b=obj;//getter!!!
运行结果只出现了一次打印,这说明obj只被读取了一次,这时候证明了赋值是第二种情况
二、引用类型的连等赋值
这里就要比上面的情况复杂一些了
var a = {n:1};
var b = a;
a.x = a = {n:2};
console.log(a===b.x); //true
未完待续,,,先睡了