2017-10-12 30 views
0

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

我最初的实现是这样的:

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

我再抬头Lodash's implementation

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

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

我猜这种方法的工作原因是JavaScript的truthinessequality规则的组合,但是Lodash的实现实际上有一个优点吗?

回答

2

value === null || value === undefinedvalue == null是等价为可以在Abstract Equality Comparison Algorithm的说明书中可以看出:

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

[...]

  • 如果xy未定义,返回
  • 如果x不确定y,返回真正
  • ESLint的“eqeqeq”规则没有相应和,因为它仅仅是掉毛,不强制执行的ECMAScript本身什么。 lodash不使用该规则。

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

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

    1

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