2017-10-12 110 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的實現將是可取的,因爲它只需要稍微少一些的比較。