3

我正在实现一个看似微不足道的实用程序函数来检查一个值是否为nullor undefined

我原来的实现是这样的:

function isNil(value) {
  return value === null || value === undefined;
}

然后我查看了Lodash 的实现

function isNil(value) {
  return value == null
}

从表面上看,这似乎是一种幼稚的方法,因为它违反了 eslint 的eqeqeq 规则,并且只检查null.

我猜测这种方法之所以有效,是因为结合了 JavaScript 的真实性相等性规则,但 Lodash 的实现实际上有优势吗?

4

2 回答 2

6

value === null || value === undefined并且value == null是等价的,可以在Abstract Equality Comparison Algorithm的规范中看到:

比较x == y, wherexy是值,产生truefalse。如下进行这样的比较:

[...]

  1. 如果xnull且未y定义,返回true
  2. 如果未定义且为nullx ,则返回truey

ESLint 的“eqeqeq”规则无关紧要,因为它只是用于 linting,它不强制 ECMAScript 本身中的任何内容。lodash 不使用该规则。

从技术上讲,没有真正的优势,因为它具有完全相同的结果。有人可能会争辩说value == null可能会更快,因为它只执行一次相等检查,并且不像您的第一个示例那样执行最多两次严格相等比较算法的调用。这很可能根本不重要,因为即使存在差异,它也会非常小。

就个人而言,我会使用它,value === null || value === undefined因为它更清晰,甚至不需要文档。此外,像 uglify 这样的工具可以很容易地替换value === null || value === undefinedvalue == null生产环境。

于 2017-10-12T18:16:33.640 回答
1

这两个表达式在功能上似乎是等效的(source)。因此,lodash 的实现会更可取,因为它需要的比较略少。

于 2017-10-12T17:56:15.293 回答