<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                [TOC] # 類型轉換 在 JS 中類型轉換只有三種情況,分別是: * 轉換為布爾值 * 轉換為數字 * 轉換為字符串 ![](https://box.kancloud.cn/9beb3f06de861e2a5eafee385c52268e_910x648.png) ## 轉Boolean 在條件判斷時,除了`undefined`,`null`,`false`,`NaN`,`''`,`0`,`-0`,其他所有值都轉為`true`,包括所有對象。 ## 對象轉原始類型 對象在轉換類型的時候,會調用內置的`[[ToPrimitive]]`函數,對于該函數來說,算法邏輯一般來說如下: * 如果已經是原始類型了,那就不需要轉換了 * 調用`x.valueOf()`,如果轉換為基礎類型,就返回轉換的值 * 調用`x.toString()`,如果轉換為基礎類型,就返回轉換的值 * 如果都沒有返回原始類型,就會報錯 當然你也可以重寫`Symbol.toPrimitive`,該方法在轉原始類型時調用優先級最高。 ~~~ let a = { valueOf() { return 0 }, toString() { return '1' }, [Symbol.toPrimitive]() { return 2 } } 1 + a // => 3 ~~~ ## 四則運算符 加法運算符不同于其他幾個運算符,它有以下幾個特點: * 運算中其中一方為字符串,那么就會把另一方也轉換為字符串 * 如果一方不是字符串或者數字,那么會將它轉換為數字或者字符串 ~~~ 1 + '1' // '11' true + true // 2 4 + [1,2,3] // "41,2,3" ~~~ * 對于第一行代碼來說,觸發特點一,所以將數字`1`轉換為字符串,得到結果`'11'` * 對于第二行代碼來說,觸發特點二,所以將`true`轉為數字`1` * 對于第三行代碼來說,觸發特點二,所以將數組通過`toString`轉為字符串`1,2,3`,得到結果`41,2,3` 另外對于加法還需要注意這個表達式`'a' + + 'b'` ~~~ 'a' + + 'b' // -> "aNaN" ~~~ 因為`+ 'b'`等于`NaN`,所以結果為`"aNaN"`,你可能也會在一些代碼中看到過`+ '1'`的形式來快速獲取`number`類型。 那么對于除了加法的運算符來說,只要其中一方是數字,那么另一方就會被轉為數字 ~~~ 4 * '3' // 12 4 * [] // 0 4 * [1, 2] // NaN ~~~ ## 比較運算符 1. 如果是對象,就通過`toPrimitive`轉換對象 2. 如果是字符串,就通過`unicode`字符索引來比較 ~~~ let a = { valueOf() { return 0 }, toString() { return '1' } } a > -1 // true ~~~ 在以上代碼中,因為`a`是對象,所以會通過`valueOf`轉換為原始類型再比較值。 ## == vs === 對于`==`來說,如果對比雙方的類型**不一樣**的話,就會進行**類型轉換**。 假如我們需要對比`x`和`y`是否相同,就會進行如下判斷流程: 1. 首先會判斷兩者類型是否**相同**。相同的話就是比大小了 2. 類型不相同的話,那么就會進行類型轉換 3. 會先判斷是否在對比`null`和`undefined`,是的話就會返回`true` 4. 判斷兩者類型是否為`string`和`number`,是的話就會將字符串轉換為`number` ~~~ 1 == '1' ↓ 1 == 1 ~~~ 5. 判斷其中一方是否為`boolean`,是的話就會把`boolean`轉為`number`再進行判斷 ~~~ '1' == true ↓ '1' == 1 ↓ 1 == 1 ~~~ 6. 判斷其中一方是否為`object`且另一方為`string`、`number`或者`symbol`,是的話就會把`object`轉為原始類型再進行判斷 ~~~ '1' == { name: 'yck' } ↓ '1' == '[object Object]' ~~~ ![](https://box.kancloud.cn/61db42c39c306965aca2c5bf4fd48083_1005x426.png) 這個流程圖并沒有將所有的情況都列舉出來,我這里只將常用到的情況列舉了,如果你想了解更多的內容可以參考[標準文檔](https://link.juejin.im/?target=https%3A%2F%2Fwww.ecma-international.org%2Fecma-262%2F5.1%2F%23sec-11.9.1)。 # 參考資料 * 前端面試之道 - 掘金小冊
                  <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>

                              哎呀哎呀视频在线观看