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

Javascript 使用'&&';作为if语句的简写?,javascript,Javascript,在我花时间查找Javascript速记模式时,我遇到了一种表达if语句的有趣方式。以下工作: ​var var1 = 5; var var2 = 1; var1 == 5 && var2++; 我认为这是一种非常酷(而且更短、更干净)的编写只需执行一个操作的if语句的方法。但是,当我尝试其他方法时,我遇到了以下代码的问题: ​var var1 = 5; var var2 = 1; var1 == 5 && var2 = 2; 我的测试没有像第一个代码段那样

在我花时间查找Javascript速记模式时,我遇到了一种表达
if
语句的有趣方式。以下工作:

​var var1 = 5;
var var2 = 1;

var1 == 5 && var2++;
我认为这是一种非常酷(而且更短、更干净)的编写只需执行一个操作的
if
语句的方法。但是,当我尝试其他方法时,我遇到了以下代码的问题:

​var var1 = 5;
var var2 = 1;

var1 == 5 && var2 = 2;
我的测试没有像第一个代码段那样工作,而是抛出一个错误:

未捕获引用错误:赋值中的左侧无效


为什么这不起作用,为什么我的语句的左边被称为不正确,而不是右边?

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

(var1 == 5 && var2) = 2; 
如果手动在作业周围加上括号,将正确解释作业

var1 == 5 && (var2 = 2); 
其他人会因为你写这样的代码而责备你,说这是个坏主意,因为这样会使代码的意图更难理解——这是真的,尤其是对于不熟悉这个习惯用法的人来说——但重要的是尝试一下,并用这样的东西进行实验,看看会发生什么。您已经遇到了这种方法的一个恼人之处

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

if(condition) statement;

虽然我相信其他人会告诉你,这是一种糟糕的风格,因为当你需要更多的语句时,你必须手动添加括号,但这对我和我来说并没有什么好处,就像你所说的那样,只为一个简单的条件使用三行比使用三行更干净。

因为你在右边使用了一个无效的运算符。它试图将整个语句作为一个变量来读取。

不要因为它没有像您预期的那样工作而感到震惊,事实上,不到一个月前,Brendan Eich(JavaScript的创建者)与我们分享,这种类型的使用更被称为语言的“滥用”,因为这个逻辑运算符并不打算执行这样的代码,而是用来确定表达式的值

“我也同意,&&line是一种滥用,由于JS的C传统,Java允许使用它,但大多数JS黑客都不喜欢它;如果使用if语句会更好…”

也就是说,您可以通过包装语句来避免运算符优先级问题:

(var1 == 5) && (var2 = 2)

很酷,这回答了我的主要问题。但我还有另一个问题:为什么作为语句左侧的
(var1==5&&var2)
被称为不正确?如果(var1==5&&var2!=未定义),这不是说
的意思吗?这应该会起作用,而右手则会被调用。@ElliotBonneville
(var1==5&&var2)
正在抛出一个错误,因为它不是作业中有效的左手边expression。把它放在左手边是没有意义的,
2
将被分配给什么?哦,对了,这是有意义的。谢谢你把这件事弄清楚!接受。。。8分钟。@ElliotBonneville
(var1==5&&var2)
的计算结果是布尔值,所以这就像说
true=2
@AndrewMarshall不是JavaScript,除非
var2
是布尔值<代码>var1=5,var2=6;var1==5&&var2;//6
if这不是一种“完全酷(而且更短、更干净)”的编写
的方法。它不干净,而且更难阅读和维护(你已经通过问这个问题证明了这一点)。如果你知道这意味着什么,它看起来更干净(imho),比写三行还要短。我还是个笨蛋,所以我不得不问这个问题。再加上它完全很酷,我想,你不能这么说。:)尽管如此,除非你在大的或复杂的条件下滥用它,至少对我来说,它比if可读得多。它是否可读对我来说是相当主观的
callback&&callback.call&&callback.call(此)
。。。如果你了解短路,即使你以前从未见过它,也不需要很长时间就能弄明白。如果你看过很多bash脚本或类似的脚本(更不用说JS了),你会马上认出它。这只是品味的问题,也没什么大不了的。如果我进入一个新的项目,它有很好的文档记录,代码有意义,一致的语法和变量命名约定,等等,都很好和干净,它在这里和那里使用了一些短路,我会非常高兴。这就像在单个语句
if
中省略大括号,或者省略分号一样。总有人会抱怨,但总的来说没人在乎。+1是关于“滥交”的注释-这正是问题所在。谢谢链接!