【问题标题】:Inverse comparison/equals arguments [duplicate]反向比较/等于参数[重复]
【发布时间】:2014-05-02 09:55:11
【问题描述】:

我在开源项目中多次看到人们写这样的东西:

if("" !== foo) {
    // ...
}

他们到底为什么要这样做?我的意思是您正在检查 foo's 的值是否为空字符串。我了解"" !== foofoo !== "" 的含义完全相同。但是编写棘手且不太明显的代码的原因是什么?

【问题讨论】:

标签: javascript optimization coding-style


【解决方案1】:

我个人也不喜欢这种风格;然而,风格源于此:

 if (x = "") { // **oops**, meant to do "==" but ended up assigning to "x"
    // ...
 }

这里的“if”语句会产生意想不到的副作用。在许多语言中,副作用和隐式转换为布尔值使得以这种方式很容易自爆(想到 JavaScript 和 C++)。为了避免这种情况,有些人习惯于颠倒顺序,因为分配给常量会产生更直接和明显的错误。我个人不喜欢这个,因为它使代码读起来不像英语(“如果 x 等于空字符串”比“如果空字符串等于 x”读起来更自然),并且更好的工具(linter,源代码分析器等)可以同样有效地捕捉到这些。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 2011-11-06
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多