赋值运算符内的赋值运算符

弟弟
'use strict';

let apples = '3';
let bananas = '4';

console.log(+apples + (apples = +bananas + 3));

输出是 10,出乎意料。我以为是 14,编译器会这样想

  1. console.log(+apples + (apples = +bananas + 3));

  2. console.log(+苹果 + (苹果 = 4 + 3));

  3. console.log(+苹果 + (苹果 = 7)); //变量'apples'将是7

  4. console.log(+苹果 + 7); //'apples' 现在等于 7

  5. 控制台日志(7 + 7);

  6. 控制台日志(14)

  7. 14

但是在第 4 步中,'apples' 显然等于 3。为什么输出不是 14?


更新:会不会是每个操作数周围都有括号,即使不是直接写的,也会自动添加?

  1. console.log((+apples) + ((apples = (+bananas) + (3)))); //由于括号现在具有相同的优先级(顺序),所以动作是从左到右完成的

  2. console.log(3 + (苹果 = 4 + 3));

  3. 控制台日志(3 +(苹果= 7));//变量'apples'将是7

  4. 控制台日志(3 + 7);//'apples' 现在等于 7

  5. 控制台日志(3 + 7);

  6. 控制台日志(10)

  7. 10

我认为,这可以从逻辑上解释为什么有 10 个而不是 14 个。


抱歉代码很笨拙。我只是在阅读 js 中的运算符后做了一些练习。

优素福

在第 4 步中,值apples不是 7,因为代码示例中的表达式是从左到右计算的。

所以下面的表达式:

+apples + (apples = +bananas + 3)

被评估为:

  1. 将 的值强制apples为数字

    3 + (apples = +bananas + 3)
    
  2. 将 的值强制bananas为数字

    3 + (apples = 4 + 3)
    
  3. 加 4 + 3 并将加法的结果分配给 apples

    3 + (apples = 7)
    
  4. (apples = 7) - 该表达式的值为 7

    3 + 7
    

最终结果 = 10。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章