she*_*ock 18 javascript google-chrome operator-precedence
a = 1;
b = "1";
if (a == b && a = 1) {
console.log("a==b");
}
Run Code Online (Sandbox Code Playgroud)
上面的Javascript代码会导致if Google Chrome 26.0.1410.43 中的语句出错:
未捕获的ReferenceError:赋值中的左侧无效
我想这是因为该变量a在声明的第二部分&&,a=1不能分配.但是,当我尝试下面的代码时,我完全糊涂了!
a = 1;
b = "1";
if (a = 1 && a == b) {
console.log("a==b");
}
Run Code Online (Sandbox Code Playgroud)
为什么一个陈述是对的,但另一个陈述是错的?
Joa*_*son 60
=具有比既能降低运营商precendence &&和==,这意味着你的第一个任务变成
if ((a == b && a) = 1) {
Run Code Online (Sandbox Code Playgroud)
由于您无法以这种方式分配表达式,因此会出错.
Tik*_*vis 21
第二个版本被解析为a = (1 && a == b); 也就是说,表达式的结果1 && a == b被赋值给了a.
第一个版本不起作用,因为分配的左侧未按预期解析.它解析表达式,好像你试图为右边的所有东西赋值 - (a == b && a) = 1.
这完全基于各种运营商的优先级.这里的问题源于=优先级低于其他运算符的事实.
因为操作顺序不符合您的预期.a == b && a = 1相当于(a == b && a) = 1等于false = 1.
如果你真的想要完成任务,你需要在它周围使用括号:a == b && (a = 1).
| 归档时间: |
|
| 查看次数: |
1245 次 |
| 最近记录: |