正确利用JS赋值表达式返回值
🙋正确利用JS赋值表达式返回值
2022-8-13
| 2023-7-17
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password

什么是赋值表达式

赋值表达式就是利用赋值号(=) 将右值赋给左值的一个表达式, 很多人应该不知道,赋值表达式也和其他表达式一样,是有返回值的。

赋值表达式的返回值是多少

例如一个常规表达式 a=1 ,针对赋值表达式, 表达式的返回值就是他的右值本身,也就是说 a=1 的返回值是1,当然,在这个例子中,并没有一个变量接收这个返回值。

赋值表达式的应用

那么,这个特性如何进行实际应用呢?相信读者很快就能想到脑海里的一种骚操作: a=b=c=d=e=1 。 没错,这种写法是完全可以解释的: 赋值表达式是将右值赋值给左值,那首先: e=1 返回值是1,接下来相当于d=1 以此类推,所有跟着的变量就全都是1了。

赋值表达式需要注意的地方

如果真的有这么好用,那也就不会有本篇文章了。最近因为这个技巧陷入了一个大坑。 因为这种写法用来初始化变量十分方便, 所以我写了类似 a=b=c=d=[] 的语句,这里的重点在于,赋值表达式的右值是一个对象类型(JS中数组也属于对象类型),后续对abcd分别进行push加内容,比如:
却发现原本不属于一个变量的元素也被加进去了。比如这时打印d,会发现d是['a','b','c','d']
通过这样讲解下来或许很容易意识到这里犯了一个很基本的错误,那就是将对象赋值给变量时,变量保存的是对象的引用,而不是对象本身,所以其实上述四个变量全都引用了同一个数组,也就是说,a、b、c、d 都等于['a','b','c','d']
通过这次踩坑,也是彻底清楚了, 赋值表达式的返回值就是右值本身,而不是右值的克隆等形式。

初始化变量的省力写法

上面这种利用赋值表达式返回值来初始化变量, 对于基本类型是完全ok的。而对于对象类型,相比一句赋值一个变量,可以用解构的形式快速赋值。
不过这种写法的缺点是,容易把一句写的很长,后续要维护更换变量或者什么情况的时候,不太方便。对应的办法是将变量分组进行多次解构赋值,或者直接干脆就一次只解构赋值部分变量:
  • JavaScript
  • 从开发人员的视角面对c盘容量紧缺的一些方案拓牛垃圾桶真的太垃圾了
    Loading...
    目录