<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 13.非值`undefined`和`null` > 原文: [http://exploringjs.com/impatient-js/ch_undefined-null.html](http://exploringjs.com/impatient-js/ch_undefined-null.html) > > 貢獻者:[飛龍](https://github.com/wizardforcel) 許多編程語言都有一個名為`null`的“非值”。它表示變量當前未指向對象。例如,尚未初始化時。 相比之下,JavaScript 有兩個:`undefined`和`null`。 ### 13.1。 `undefined`與`null` 兩個值都非常相似,并且通常可互換使用。因此它們的區別是微妙的。語言本身具有以下區別: * `undefined`表示“未初始化”(例如變量)或“不存在”(例如對象的屬性)。 * `null`表示“故意沒有任何對象值”([參考語言規范](https://tc39.github.io/ecma262/#sec-null-value))。 程序員可以做出以下區分: * `undefined`是語言使用的非值(當某些內容未初始化時)。 * `null`表示“明確關閉”。也就是說,它有助于實現一種類型,既包含有意義的值又包含代表“無意義的值”的元值。這種類型在函數式編程中稱為[*可選類型*或*可能類型*](https://en.wikipedia.org/wiki/Option_type) 。 ### 13.2。 `undefined`和`null`的位置 以下小節描述了`undefined`和`null`在語言中的位置。我們將遇到幾種機制,本書稍后將對此進行更詳細的解釋。 #### 13.2.1。 `undefined`的位置 未初始化的變量`myVar`: ```js let myVar; assert.equal(myVar, undefined); ``` 未提供的參數`x`: ```js function func(x) { return x; } assert.equal(func(), undefined); ``` 缺失屬性`.unknownProp`: ```js const obj = {}; assert.equal(obj.unknownProp, undefined); ``` 如果沒有通過`return`運算符顯式指定函數的結果,JavaScript 會為您返回`undefined`: ```js function func() {} assert.equal(func(), undefined); ``` #### 13.2.2。 `null`的位置 對象的原型是一個對象,或者在原型鏈的末尾,是`null`。 `Object.prototype`沒有原型: ```js > Object.getPrototypeOf(Object.prototype) null ``` 如果將正則表達式(例如`/a/`)與字符串(例如`'x'`)匹配,則可以獲得具有匹配數據的對象(如果匹配成功)或`null`(如果匹配失敗): ```js > /a/.exec('x') null ``` [JSON 數據格式](ch_json.html)不支持`undefined`,僅支持`null`: ```js > JSON.stringify({a: undefined, b: null}) '{"b":null}' ``` ### 13.3。檢查`undefined`或`null` 檢查: `x`有值嗎? ```js if (x === null) ··· if (x === undefined) ··· ``` `x`是`undefined`還是`null`? ```js if (x !== undefined && x !== null) { // ··· } if (x) { // truthy? // x is neither: undefined, null, false, 0, NaN, '' } ``` *真值*的意思是“如果強制轉換為布爾值則為`true`”。*假值*的意思是“如果強制轉換為布爾值則為`false`”。在[布爾值](ch_booleans.html#falsiness-truthiness)的章節中正確解釋了這兩個概念。 ### 13.4。 `undefined`和`null`沒有屬性 `undefined`和`null`是兩個唯一的 JavaScript 值,如果您嘗試讀取屬性,則會獲得異常。為了探索這種現象,讓我們使用以下函數,它讀取(“獲取”)屬性`.foo`并返回結果。 ```js function getFoo(x) { return x.foo; } ``` 如果我們將`getFoo()`應用于各種值,我們可以看到它只對`undefined`和`null`失敗: ```js > getFoo(undefined) TypeError: Cannot read property 'foo' of undefined > getFoo(null) TypeError: Cannot read property 'foo' of null > getFoo(true) undefined > getFoo({}) undefined ``` ### 13.5。 `undefined`和`null`的歷史 在 Java(它激發了 JavaScript 的許多方面)中,初始化值取決于變量的靜態類型: * 具有對象類型的變量用`null`初始化。 * 每個原始類型都有自己的初始化值。例如,`int`變量用`0`初始化。 在 JavaScript 中,每個變量都可以包含對象值和原始值。因此,如果`null`表示“不是對象”,JavaScript 還需要一個初始化值,這意味著“既不是對象也不是原始值”。初始化值為`undefined`。 ![](https://img.kancloud.cn/ff/a8/ffa8e16628cad59b09c786b836722faa.svg) **測驗** 參見[測驗應用程序](ch_quizzes-exercises.html#quizzes)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看