【问题标题】:The order of expressions in an if statement [duplicate]if语句中的表达式顺序[重复]
【发布时间】:2012-12-23 10:52:15
【问题描述】:

可能重复:
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

【问题讨论】:

  • 两者都是正确的,但第二个是丑陋的。
  • i.stack.imgur.com/xXkvA.jpg,来自this deleted answer。对于看不到已删除内容的人:"Yoda Conditions"— using if(constant == variable) instead of if(variable == constant), like if(4 == foo). Because it's like saying "if blue is the sky" or "if tall is the man"。又名丑得要命:)
  • 它没有跑得更快。它更丑,因此您会减慢调试和阅读代码的速度
  • @Yoshi 在这种特殊情况下,请使用!(my...

标签: javascript if-statement operators


【解决方案1】:

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

“如果天空是蓝色的”

而不是

“如果天空是蓝色的”

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

【讨论】:

  • Closure Compiler 将值设置在if 子句的首位。
  • 我试过了。我注意到。看起来还是从右往左看
  • 我想知道为什么 Closure Compiler 使用“Yoda 条件”?
  • codinghorror.com/blog/2012/07/new-programming-jargon.html 将此定义为“尤达条件”并使用“如果蓝色是天空”示例。
  • @Jimmery:我在某处读到(我认为是在 Closure 编译器的讨论论坛上)1 === somevar 比 somevar === 1 压缩得更好,这是唯一的原因。
【解决方案2】:

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

if (42 = myVar) { }

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

if (myVar = 42) { } 

评估赋值表达式的完成值,在本例中为 42,它是 JavaScript 中的 真实值。

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

【讨论】:

【解决方案3】:

===:

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

== :

== 更复杂,因为涉及到转换,但 the specification makes it clear :

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

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

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

【讨论】:

    【解决方案4】:

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

    一些程序员选择使用它的主要原因是为了避免写if (a = 1)的常见错误,程序员实际上是指if (a == 1)或if (a === 1)。以下代码行将起作用,但与预期不同(a 被分配了一个值,if 块将始终被执行):

    if (a = 1) {}
    

    反过来写的相同表达式会产生语法(或编译)错误:

    if (1 = a) {}
    

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

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

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

    猜你喜欢
    • 1970-01-01
    • 2018-08-13
    • 2019-02-06
    • 1970-01-01
    • 2011-07-22
    • 2016-03-17
    • 2022-12-31
    • 2016-12-19
    • 1970-01-01
    相关资源
    最近更新 更多