js连等赋值

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 时可能是两种情况:

  1. x = z,y = z
  2. 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

未完待续,,,先睡了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜叶w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值