赋值运算符内的赋值运算符
An assignment operator inside an assignment operator
'use strict';
let apples = '3';
let bananas = '4';
console.log(+apples + (apples = +bananas + 3));
输出结果是10,出乎意料。我以为会是 14,编译器会这样想
console.log(+苹果+(苹果=+香蕉+3));
console.log(+苹果+(苹果=4+3));
console.log(+苹果+(苹果=7)); //变量 'apples' 将变为 7
console.log(+苹果+7); //'apples' 现在等于 7
console.log(7 + 7);
console.log(14)
14
但是在第4步,'apples'显然等于3。为什么输出不是14?
update: 是不是每个操作数都有括号,不是直接写的,而是自动加上的?
console.log((+苹果) + ((苹果 = (+香蕉) + (3)))); //由于括号现在具有相同的优先级(顺序),操作从左到右完成
console.log(3 + (苹果 = 4 + 3));
console.log(3 + (苹果 = 7)); //变量 'apples' 将变为 7
console.log(3 + 7); //'apples' 现在等于 7
console.log(3 + 7);
console.log(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。
'use strict';
let apples = '3';
let bananas = '4';
console.log(+apples + (apples = +bananas + 3));
输出结果是10,出乎意料。我以为会是 14,编译器会这样想
console.log(+苹果+(苹果=+香蕉+3));
console.log(+苹果+(苹果=4+3));
console.log(+苹果+(苹果=7)); //变量 'apples' 将变为 7
console.log(+苹果+7); //'apples' 现在等于 7
console.log(7 + 7);
console.log(14)
14
但是在第4步,'apples'显然等于3。为什么输出不是14?
update: 是不是每个操作数都有括号,不是直接写的,而是自动加上的?
console.log((+苹果) + ((苹果 = (+香蕉) + (3)))); //由于括号现在具有相同的优先级(顺序),操作从左到右完成
console.log(3 + (苹果 = 4 + 3));
console.log(3 + (苹果 = 7)); //变量 'apples' 将变为 7
console.log(3 + 7); //'apples' 现在等于 7
console.log(3 + 7);
console.log(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)
- 这个表达式的值为 73 + 7
最终结果 = 10。