JavaScript 表达式与赋值 小思考

今天群里一个小伙伴用短路运算,在 || 后面用了赋值语句,语法检查过不去,是为啥呢?

想起来以前看的一篇关于表达式的文章

表达式(expression)是JavaScript中的一个短语,JavaScript解释器会将其计算出一个结果。

将简单表达式组合成复杂表达式最常用的方法就是使用运算符(operator)。运算符按照特定的运算规则对操作数进行运算,并计算出新值。

而圆括号就是一种分组运算符,直接使用赋值,并没有返回给运算符结果,用了(),执行赋值后,会返回一个结果。

我们来测试一下:a就是表达式返回的结果,如果没有括号,从语法上首先过不去,因为它只是赋值,没有运算,没有返回,而括号有,返回什么呢,这里应该是true,因为是||运算,第一个为false,就不继续了,看第二个。

1
2
3
4
5
6
let flag = true;
let test = "123";
let a = test === "123" || (flag = false);
//这里如果括号去除,会报错
console.log(a)
console.log(flag)

null

表达式(expression)是JavaScript中的一个短语,JavaScript解释器会将其计算出一个结果。 将简单表达式组合成复杂表达式最常用的方法就是使用运算符(operator)。运算符按照特定的运算规则对操作数进行运算,并计算出新值。null

再看看第二种:这回,括号的返回成功了:true,同时flag与被改变了。

1
2
3
4
5
let flag = false;
let test = "123";
let a = (flag = true);
console.log(a)
console.log(flag);

null

null

看看我们这个问题:就好解决了。

null

因为,这里需要的是表达式,不是语句,有用过React的同学应该见过return后面总会跟个(),因为要返回的是一个表达式结果,不是一个赋值操作,上面的正确写法是:

null