2016-06-26 20 views
3

是否有一个具体的原因,我看到很多人写的Javascript:操作数的比较运算顺序

if(1 === a) {...} 

代替

if(a === 1) {...} 

我已经给出了其中我写了类似的答案Array === obj.constructor这是有人问我,他经常看到人们这样写而不是obj.constructor === Array

那么,我使用哪种方式真的很重要?

+0

可能是因为'x === y' x首先被评估,如果x是NaN false按照规范ASAP返回http://www.ecma-international.org/ecma-262/6.0/ #sec-strict-equality-comparison – gurvinder372

+0

这是一种安慰剂的做法:人们相信它会解决他们最重要的发展问题。 – zerkms

回答

3

这是yoda conditions

尤达条件如此命名是因为条件的字面意义是第一位的,而可变排第二。例如,下面是一个尤达条件:

if ("red" === color) { 
    // ... 
} 

这就是所谓的尤达条件,因为它的内容,“红色的颜色”,类似星球大战人物尤达说话的方式。相较于安排操作数的另一种方式:

if (color === "red") { 
    // ... 
} 

这通常写着,“颜色是红色的”,这可以说是形容比较更自然的方式。

尤达条件的支持者强调,不可能错误地使用=而不是==,因为你不能分配一个字面值。这样做会导致语法错误,并会在早期通知您错误。因此,这种做法在早期的编程工具中尚不可用的情况下非常普遍。

尤达条件的反对者指出,工具使我们更好的程序员,因为工具会捕获错误地使用=而不是==(ESLint会为你解决这个问题)。因此,他们认为,模式的效用不会超过代码在使用Yoda条件时需要的可读性。

+1

有趣。这支部队的力量很强。 – shinobi