使用'&&'作为简写if语句?

Ell*_*lle 16 javascript

当我在消磨时间查找的Javascript速记方式,我碰到表达的一种有趣的方式if陈述这里.以下作品:

?var var1 = 5;
var var2 = 1;

var1 == 5 && var2++;
Run Code Online (Sandbox Code Playgroud)

我认为这是一种非常酷(而且更简洁,更简洁)的编写if语句的方式,只需要进行一次操作.但是,当我尝试使用其他代码时,我遇到了以下代码的问题:

?var var1 = 5;
var var2 = 1;

var1 == 5 && var2 = 2;
Run Code Online (Sandbox Code Playgroud)

我的测试不会像第一个代码片段那样工作,而是抛出一个错误:

未捕获的ReferenceError:赋值中的左侧无效

为什么这不起作用,为什么我的陈述的左侧被称为不正确而不是右手?

Pet*_*son 30

这不起作用,因为&&操作符比更高的优先级=操作.换句话说,您的代码解释如下:

(var1 == 5 && var2) = 2; 
Run Code Online (Sandbox Code Playgroud)

如果在赋值周围手动放置括号,则会正确解释它.

var1 == 5 && (var2 = 2); 
Run Code Online (Sandbox Code Playgroud)

其他人会谴责你写这样的代码,说这是一个坏主意,因为它使代码的意图更难阅读 - 这是真的,特别是对于不熟悉这个习语的人 - 但重要的是尝试它出去尝试这样的事情,亲眼看看会发生什么.你已经遇到过关于这种方法的烦人事情之一.

无论如何,在这种情况下,我个人更喜欢使用单行if语句,就像这样

if(condition) statement;
Run Code Online (Sandbox Code Playgroud)

虽然我确信其他人会告诉你那种不好的风格,因为你需要在需要更多语句时手动添加括号,这对我来说并不是真的比IMO更简洁,只是为了一个简单的条件使用三行,就像你说的那样.


Sam*_*son 14

不要担心这不会像你期望的那样起作用,事实上不到一个月前,Brendan Eich(JavaScript的创造者)与我们分享这种类型的使用更为人所知的是"滥用"语言,因为这个逻辑运算符并不意味着执行这样的代码,而是意味着确定表达式的值.

"我也同意...... && line是一种滥用,由于JS通过Java的C传承而被允许,但大多数JS黑客都不赞成;而且if语句会更好......" http: //brendaneich.com/2012/04/the-infernal-semicolon/

话虽如此,您可以通过包装语句来避免运算符优先级问题:

(var1 == 5) && (var2 = 2)
Run Code Online (Sandbox Code Playgroud)

  • 关于"滥用"的说明+1 - 这正是这个. (6认同)