Javascript 比较 == 空替代方案
Javascript comparisons == null alternatives
在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
吗?如果是这样,它不起作用的陷阱和例外是什么?它是否适用于常规数组项、字符串、对象属性?
我选择解决方案的标准是
- 干净的代码
- 易于阅读和快速理解
- 验证 JSint 规则
- 适用于现代浏览器(截至 2015 年 1 月撰写)
我知道还有其他稍微相关的问题来讨论相等运算符==
与===
的差异,但这仅仅是为了讨论 if 语句中的评估与 null-ish 相比。
所以问题是,我通常可以用否定的表达式 if 语句替换 == null 吗?
可能不是普遍的,不,但也许在某些地方。
如果是这样,它不起作用的陷阱和例外是什么?它是否适用于常规数组项、字符串、对象属性?
对于所有错误值,!value
检查都是正确的,而不仅仅是 null
和 undefined
。完整的列表是:null
、undefined
、0
、""
、NaN
,当然还有false
。
所以如果你有name = ""
那么
if (!name) {
// ...
}
。将评估 true 并进入块,您之前的
if (name == null) {
// ...
}
。不会。因此,只是在任何地方都这样做可能会带来问题。
但是对于您知道确实想要分支任何错误值的情况,!value
非常方便。例如,如果一个变量是undefined
(或null
)或对象引用,我将使用 if (!obj)
来测试它,因为任何 false 值对我来说都足够好了。
如果你想继续使用 JSHint 的===
规则,你可以给自己一个实用程序函数:
function isNullish(value) {
return value === null || typeof value === "undefined";
}
函数调用的开销没有什么可远程担心的(更多),如果它位于热点中,任何像样的 JavaScript 引擎都会内联它。
- 轻量级zxcvbn替代方案
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- ng映射方向备选方案
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- jQuery自定义验证比较多个输入的序列
- 反向字符串比较
- 通过JSON&比较时间
- 将DOM节点值与字符串Javascript进行比较
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 为什么$.brower被弃用?还有什么更好的替代方案
- 递归深度比较
- 执行php函数的onclick事件的其他替代方案
- 可以't在JavaScript中比较两个字符串
- Android上URL方案的替代方案
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 如何在moment.js中只比较日期
- 无法比较javascript变量
- Javascript 比较 == 空替代方案
- JS框架在Dojo中参考主题和解决方案的比较