深入理解JavaScript赋值表达式(一)

时间:2025-01-19 20:56:06
别忘了,单个等号(=)是用于完成赋值操作的。如果你在条件语句的某个条件里使用了单个等号,那么只要相应的赋值取得成功,那个条件的求值结果就将是true。
我觉得作者在这里对赋值运算的细节做了简化,虽然给出的代码确实如其所说,但对于原因的表述却是错误的。
根据犀牛书,page81页,
“=”运算希望它的左操作数是一个左值:一个变量或者对象属性(或数组元素)。它的右操作数可以是任意类型的任意值。赋值表达式的值就是右操作数的值。
下面来讲讲细节。在控制台运行下面代码:

    
    
  1. var a;
  2. console.log(a=10); // => 输出 10
  3. if(a=20){
  4. console.log('ok');
  5. } // => 输出 ok
第一个输出的是10,因为该赋值操作的右操作数是一个Number直接量,于是赋值表达式的值就是10.
第二个输出结果是ok,是因为条件表达式发生了两件事:
1)运行赋值表达式,整个表达式的值为20
2)类型转换,将数值类型 20 转换为 布尔类型,结果为 true
于是运行该条件语句。
而不是像作者说的“只要相应的赋值操作取得成功,那个条件的求值结果就将是true”。
例如:

    
    
  1. var a;
  2. if(a=0){
  3. console.log('ok');
  4. }else{
  5. console.log('shit');
  6. } // => 输出 shit
这里赋值运算成功了,运行的条件分支却是else。