2017-03-01 128 views
2

我有下面的代码段,它按预期工作。其中x是一个变量变量===常数和常量===变量有什么区别

var myVariable = (x === 'A' || x=== 'B') ? 'sui' : 'pai'; 

但关闭编译器将其转换为

var myVariable = ('A' === x || 'B'=== x) ? 'sui' : 'pai'; 

,这也是working.Can请你告诉我第二个片段是如何比第一个更好的。谢谢。

+2

请参阅[尤达条件](https://en.wikipedia.org/wiki/Yoda_conditions)。但在我看来,使用棉绒来捕捉像这样的错误要好得多。 – str

+0

@str谢谢。该链接真的很有帮助 – brk

回答

6

人类程序员sometimes do this以确保它们不会混淆=赋值运算符与等于==运算符。

如果您错误地使用constant = variable而不是constant == variable,编译器或解释器将产生警告或错误。 Chrome浏览器,例如,做到这一点:

> 'A' = x 
VM207:1 Uncaught ReferenceError: Invalid left-hand side in assignment 

我不知道为什么transpiler会打扰,如果它足够聪明,能够交换的参数,以防止运行时错误,因为它应该也可以聪明到足以在传递时间产生相同的警告。