7

可能重复:
这些(bCondition == NULL)和(NULL==bCondition)有什么区别?
比较语句的 Javascript 缩小

我一直在写我的if陈述是这样的:

if(variable1 === 1){}
if(variable2 > 10){}
if(variable3 == "a"){}

但我记得在某处读过(不幸的是,我再也找不到那个页面了),这些if陈述最好这样写:

if(1 === variable1){}
if(10 < variable2){}
if("a" == variable3){}

您将变量放在表达式右侧的位置。

这个对吗?如果是这样,任何人都可以解释为什么这是正确的吗?此外,这适用于所有编程语言,还是仅适用于 javascript?

TIA

4

4 回答 4

5

1 === variable1与用尤达记法**写的表达式相同variable1 === 1:左侧列出常量,右侧列出变量。

一些程序员选择使用它的主要原因是为了避免在if (a = 1)程序员的实际意思if (a == 1)if (a === 1). 以下代码行将起作用,但不会按预期工作(a分配了一个值并且if块将始终被执行):

if (a = 1) {}

以相反方式编写的相同表达式将生成语法(或编译)错误:

if (1 = a) {}

程序员可以立即发现错误并修复它。

我不喜欢也不使用尤达符号。我在编码时尽量睁大眼睛。

** 我无法找出这个词的来源。

于 2013-01-09T11:47:02.743 回答
2

有些人可能更喜欢颠倒值的顺序,if因为第二种形式更具保护性。事实上,如果你错过了输入等号:

if (42 = myVar) { }

在编译时抛出语法错误,而

if (myVar = 42) { } 

评估赋值表达式的完成值,42在这种情况下,它是 JavaScript 中的真值

无论如何,今天可以使用eslint等工具轻松发现类似的错误......所以使用第一种形式没有真正意义。

于 2013-01-09T11:44:03.230 回答
1

两者都是正确的,但第二个是丑陋的,我还没有真正看到它。和说的一样

“如果蓝色是天空”

代替

“如果天空是蓝色的”

. 无法回忆我在哪里读过它:)。

于 2013-01-09T11:42:58.387 回答
0

=== :

根据定义,它是可交换的,因为它检查两个对象是否相同(相同类型,相同值)。

== :

== 更复杂,因为涉及转换,但规范明确

A == B 等价于 B == A,除了 A 和 B 的求值顺序

换句话说,==是可交换的。

这意味着您应该简单地使用不那么丑陋和读者最熟悉的。那是第一个。

于 2013-01-09T11:44:54.117 回答