【发布时间】:2015-01-31 09:25:52
【问题描述】:
在 JavaScript 代码中,我想替换以下 if 语句的双等号结构:
if( name == null ) {
//do stuff
}
jshint 规则“eqeqeq”的双等号失败,建议将双等号替换为三等号。暂时,让我们想象一下上面的代码从== null变成=== null是这样的:
if( name === null ) {
//do stuff
}
这适用于显式定义的具有值null 的变量,但不幸的是对于像这样的任何未设置的变量都会失败。
var a = null; // works correctly
var b; // will fail in comparison
以前,当三等号规则对我很重要时,我会执行以下操作
if( name === null ||| typeof(name) === 'undefined' )
但我觉得这非常臃肿。
我现在能想出的最好的替代方法是使用 if 语句的性质,让它评估为一个假表达式,就像这里我否定表达式并简单地删除 == null 部分:
if( !name ) {
//do stuff
}
对我来说,这更简单,易于阅读,并且完全避免了显式的等于比较。但是,我不确定是否有任何边缘原因我在这里错过了?
所以问题是,我一般可以用否定表达式 if 语句替换 == null 吗?如果是这样,它不起作用的陷阱和例外是什么?它适用于一般数组项、字符串、对象属性吗?
我选择解决方案的标准是
- 干净的代码
- 易读易懂
- 验证 jshint 规则
- 适用于现代浏览器(截至 2015 年 1 月撰写)
我知道与讨论 difference in the equality operators == vs === 的其他稍微相关的问题,但这只是为了讨论与 if 语句中的 null ish 相比的评估。
【问题讨论】:
-
===规则被大大高估了,我可能会直接关掉它。 -
我喜欢
===规则还有一个原因:字符串比较。相反,我认为最奇怪的是javascript最初同时引入了==和===。这会导致错误等待发生。
标签: javascript jshint triple-equals