【问题标题】:Inverse comparison/equals arguments [duplicate]反向比较/等于参数[重复]
【发布时间】:2014-05-02 09:55:11
【问题描述】:
我在开源项目中多次看到人们写这样的东西:
if("" !== foo) {
// ...
}
他们到底为什么要这样做?我的意思是您正在检查 foo's 的值是否为空字符串。我了解"" !== foo 和foo !== "" 的含义完全相同。但是编写棘手且不太明显的代码的原因是什么?
【问题讨论】:
标签:
javascript
optimization
coding-style
【解决方案1】:
我个人也不喜欢这种风格;然而,风格源于此:
if (x = "") { // **oops**, meant to do "==" but ended up assigning to "x"
// ...
}
这里的“if”语句会产生意想不到的副作用。在许多语言中,副作用和隐式转换为布尔值使得以这种方式很容易自爆(想到 JavaScript 和 C++)。为了避免这种情况,有些人习惯于颠倒顺序,因为分配给常量会产生更直接和明显的错误。我个人不喜欢这个,因为它使代码读起来不像英语(“如果 x 等于空字符串”比“如果空字符串等于 x”读起来更自然),并且更好的工具(linter,源代码分析器等)可以同样有效地捕捉到这些。