实现isNil

时间:2017-10-12 17:53:28

标签: javascript null undefined lodash truthiness

我正在实现一个看似简单的实用函数来检查值是null还是undefined

我原来的实现看起来像这样:

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

然后我查了Lodash's implementation

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

从表面上看,这似乎是一种愚蠢的做法,因为它违反了eslint的eqeqeq rule以及只检查null

我猜这种方法是由于JavaScript truthinessequality规则的组合而有效,但Lodash的实施是否真的有优势?

2 个答案:

答案 0 :(得分:3)

value === null || value === undefinedvalue == null相同,可以在Abstract Equality Comparison Algorithm的规范中看到:

  

比较x == y,其中xy是值,会产生 true false 。这样的比较如下进行:

     

[...]

     
      
  1. 如果x null y 未定义,请返回 true
  2.   
  3. 如果x 未定义y null ,请返回 true
  4.   

ESLint的“eqeqeq”规则并不相关,因为它只适用于linting,它不会强制执行ECMAScript本身的任何内容。并且lodash不使用该规则。

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

就个人而言,我会使用value === null || value === undefined,因为它更清晰,甚至不需要文档。此外,uglify等工具可以轻松地将value === null || value === undefined替换为value == null进行生产。

答案 1 :(得分:1)

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