「譯」JavaScript 的怪癖 2:兩個「空值」:undefined 和 null

來源:互聯網
上載者:User

原文:JavaScript quirk 2: two “non-values” – undefined and null

譯文:「譯」JavaScript 的怪癖 2:兩個「空值」:undefined 和 null

譯者:SingleSeeker

對於“空值”或“Null 參考”,大多數程式設計語言只有一個值。比如,在 Java 中用的是 null。 但是在 Javascript 中卻有兩個特殊的值:undefined 和 null。 他們基本上是相同,但用法上卻略有些不同。 在這個 系列教程 的最後,我會解釋一下在 ECMAScript 6 中的一些變化。

undefined 是被語言本身所分配的。 如果一個變數還沒有被初始化,那麼它的值就是 undefined:

> var foo;> fooundefined

同理,當缺失參數時 JavaScript 會分配一個 undefined:

> function id(x) { return x }> id()undefined

null 是被開發人員用來明確指出某個值是缺失的, 例如,對於 JSON.stringify():

> console.log(JSON.stringify({ first: 'Jane' }, null, 4)){    "first": "Jane"}

校檢:一個變數是否有值?

如果你想知道變數 v 是否有值,正常情況下,你需要同時檢驗 undefined 與 null。 幸運的是兩個值都是 false 型。 因此,只用一個判斷,就可以同時檢驗這兩項是否為真:

if (v) {    // v 有值} else {    // v 沒有值}

在本 系列 的第 5 部分——關於函數參數的處理——你將會看到更多的上面校檢例子。 有一點要注意的是:這個檢查也會把 false,-0, +0, NaN 與 '' 當成“空值”。 如果這不是你想要的,那麼就不能使用上面的校檢方法了。

你有兩個選擇。

有些人提倡使用不等於(!=)來校檢 v 既不是 undefined 或 null:

if (v != null) {    // v 有值} else {    // v 沒有值}

不過,這要求你要明白 != 認為 null 只等於它自己或是 undefined。 我喜歡用更有可讀性的 !==

if (v !== undefined && v !== null) {    // v 有值} else {    // v 沒有值}

效能方面,所有在這個章節中提到的這三個校檢基本是相同的。 所以,最後用哪個取決於你的需求還有你的品味。 一些壓縮公用程式甚至用!= 重寫了最後一條校檢。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.