可能重复:
What is the difference between these (bCondition == NULL) and (NULL==bCondition)?
Javascript minification of comparison statements
我一直在写这样的if
语句:
if(variable1 === 1){}
if(variable2 > 10){}
if(variable3 == "a"){}
但是我记得在某个地方读书(不幸的是我再也找不到那个页面了),if
语句最好这样写:
if(1 === variable1){}
if(10 < variable2){}
if("a" == variable3){}
将变量放在表达式右侧的位置。
这是对的吗?而且,如果是这样,任何人都可以解释为什么这是正确的?此外,这适用于所有编程语言,还是只适用于javascript?
TIA
答案 0 :(得分:5)
1 === variable1
与用Yoda表示法编写的表达式variable1 === 1
相同**:左侧列出的常量,右侧的变量。
一些程序员选择使用它的主要原因是为了避免编写程序员实际意味着if (a = 1)
或if (a == 1)
的{{1}}的常见错误。以下代码行将起作用但不符合预期(if (a === 1)
分配了一个值,a
块将始终执行):
if
反过来写的相同表达式将生成语法(或编译)错误:
if (a = 1) {}
程序员可以立即发现错误并修复它。
我不喜欢或使用尤达符号。我在编码时试图睁大眼睛。
**我无法找到这个词的来源。
答案 1 :(得分:2)
有些人可能更喜欢颠倒if
中值的顺序,因为第二种形式更具保护性。
事实上,如果你错过了输入等号:
if (42 = myVar) { }
在编译时抛出语法错误,而
if (myVar = 42) { }
在此情况下评估赋值表达式42
的完成值,即JavaScript中的 truthy值。
无论如何,使用诸如eslint之类的工具可以很容易地发现今天类似的错误......所以使用第一种形式没有任何意义。
答案 2 :(得分:1)
两者都是正确的,但第二个是丑陋的,我还没有真正看到它。它与说法相同
“如果蓝色是天空”
而不是
“如果天空是蓝色的”
。不能重述我读过的地方:)。
答案 3 :(得分:0)
===:
根据定义,它是可交换的,因为它检查两个对象是否相同(相同类型,相同值)。
==:
==更为复杂,因为涉及转化但the specification makes it clear:
A == B等于B == A,除了A和B的评估顺序
换句话说,==
是可交换的。
这意味着你应该简单地使用不那么丑陋和最熟悉的读者。那是第一个。