簡體   English   中英

檢查變量是否未定義的最佳實踐

[英]Best practice of checking if variable is undefined

關於未定義變量,我在條件方面遇到了一些問題。 總結一下,檢查變量是否未定義的最佳方法是什么?

我主要是在苦苦掙扎

x === undefined

typeof x === 'undefined'

您可以使用這兩種方法來檢查值是否undefined 但是,您需要注意的細微差別。

第一種方法使用嚴格比較===運算符來比較undefined 類型

var x;
// ...

x === undefined; // true

只有在聲明了變量但undefined變量時,這將按預期工作,即具有undefined值,這意味着您在代碼中的某處具有var x ,但從未為其分配過值。 所以它的undefinedundefined的。

但是如果變量沒有var關鍵字聲明上面的代碼會拋出引用錯誤:

x === undefined // ReferenceError: x is not defined 

在類似這些情況, typeof比較更可靠:

typeof x == 'undefined' // true

在兩種情況下都可以正常工作:如果變量從未被賦值,並且其值實際上是undefined

x === undefined

如果未聲明變量,則不起作用。 僅當聲明了變量但未定義變量時,才返回true

更好用

typeof x === 'undefined'

我想兩者都取決於你測試的是什么? 如果它是一個屬性,我總是使用x === undefined ,因為它更清晰(而且看起來更快)。

正如其他人所說,如果沒有聲明x, x === undefined將不起作用。 就個人而言,我發現使用它的更好的理由,因為通常我不應該檢查變量是否被聲明 - 它通常是編碼錯誤的標志。

我已經看到很多其他版本用於測試參數 - f = function(x) {if (typeof x == 'undefined') …} - 如果我是代碼審查這樣的代碼我會告訴他們更改。 事實上我們知道這個變量已被宣布,並養成以這種方式編寫變量的習慣,這增加了你浪費時間追逐拼寫錯誤的機會。

主要的例外是當您嘗試檢查組件或庫是否已正確加載或初始化時。 if (typeof jQuery == 'undefined') …有道理。 但從中期來看,所有這些都應該成為模塊,在這種情況下,我認為測試類型應該被淘汰為有害的。

(另外,就我個人而言,我更喜歡if (window.jQuery === undefined) 。但是,對於同構代碼,它不可移植。)

你可以使用它們中的任何一個。 如果您想檢查變量是否未定義或為null,您可以使用:

x == null

如果x未定義或為null,則結果為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM