'use strict';
let apples = '3';
let bananas = '4';
console.log(+apples + (apples = +bananas + 3));
输出是 10,出乎意料。我以为是 14,编译器会这样想
console.log(+apples + (apples = +bananas + 3));
console.log(+苹果 + (苹果 = 4 + 3));
console.log(+苹果 + (苹果 = 7)); //变量'apples'将是7
console.log(+苹果 + 7); //'apples' 现在等于 7
控制台日志(7 + 7);
控制台日志(14)
14
但是在第 4 步中,'apples' 显然等于 3。为什么输出不是 14?
更新:会不会是每个操作数周围都有括号,即使不是直接写的,也会自动添加?
console.log((+apples) + ((apples = (+bananas) + (3)))); //由于括号现在具有相同的优先级(顺序),所以动作是从左到右完成的
console.log(3 + (苹果 = 4 + 3));
控制台日志(3 +(苹果= 7));//变量'apples'将是7
控制台日志(3 + 7);//'apples' 现在等于 7
控制台日志(3 + 7);
控制台日志(10)
10
我认为,这可以从逻辑上解释为什么有 10 个而不是 14 个。
抱歉代码很笨拙。我只是在阅读 js 中的运算符后做了一些练习。
在第 4 步中,值apples
不是 7,因为代码示例中的表达式是从左到右计算的。
所以下面的表达式:
+apples + (apples = +bananas + 3)
被评估为:
将 的值强制apples
为数字
3 + (apples = +bananas + 3)
将 的值强制bananas
为数字
3 + (apples = 4 + 3)
加 4 + 3 并将加法的结果分配给 apples
3 + (apples = 7)
(apples = 7)
- 该表达式的值为 7
3 + 7
最终结果 = 10。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句