实施是零



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

我最初的实现是这样的:

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

然后我查阅了Lodash的实现:

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

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

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

value === null || value === undefinedvalue == null是等价的,这可以在抽象等式比较算法的规范中看到:

比较x == y,其中xy是值,产生truefalse。这样的比较如下:

[…]

  1. 如果xnully未定义,则返回true
  2. 如果x未定义ynull,则返回true

ESLint的"eqeqeq"规则并不相关,因为它只是用于linting,它在ECMAScript本身中不强制执行任何内容。洛达什没有使用这个规则。

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

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

这两个表达式在功能上似乎是等效的(源代码)。因此,lodash的实现会更可取,因为它只需要稍微少一些比较。

相关内容

  • 没有找到相关文章

最新更新