Jon*_*ink 2 javascript null undefined truthiness lodash
我正在实现一个看似微不足道的实用程序函数来检查值是否为null或undefined。
我原来的实现是这样的:
function isNil(value) {
return value === null || value === undefined;
}
Run Code Online (Sandbox Code Playgroud)
然后我查找了Lodash 的实现:
function isNil(value) {
return value == null
}
Run Code Online (Sandbox Code Playgroud)
从表面上看,这似乎是一种天真的方法,因为它违反了 eslint 的eqeqeq 规则并且只检查null.
我猜测这种方法之所以有效是因为 JavaScript 的真实性和相等性规则的结合,但是 Lodash 的实现实际上有优势吗?
value === null || value === undefined和value == null是等效的,如抽象相等比较算法的规范所示:
比较
x == y,其中x和y是值,产生true或false。这样的比较如下:[...]
- 如果
x是零和y的不确定,返回真。- 如果
x是不确定的和y是零,返回真。
ESLint 的“eqeqeq”规则并不相关,因为它仅用于 linting,它不会在 ECMAScript 本身中强制执行任何操作。而 lodash 不使用该规则。
从技术上讲,没有真正的优势,因为它具有完全相同的结果。有人可能会争辩说value == null可能会更快,因为它只执行一次相等性检查,并且不会像您的第一个示例那样执行最多两次严格相等性比较算法的调用。这很可能根本无关紧要,因为即使存在差异,它也会非常小。
就个人而言,我会使用 ,value === null || value === undefined因为它更清晰,甚至不需要文档。此外,像丑化工具可以很容易地更换value === null || value === undefined与value == null生产。