JavaScript類型轉換小結

來源:互聯網
上載者:User

類型轉換
JavaScript 是弱類型語言,所以會在任何可能的情況下應用強制類型轉換。
// 下面的比較結果是:true
new Number(10) == 10; // Number.toString() 返回的字串被再次轉換為數字

10 == '10';           // 字串被轉換為數字
10 == '+10 ';         // 同上
10 == '010';          // 同上
isNaN(null) == false; // null 被轉換為數字 0
                     // 0 當然不是一個 NaN(譯者註:否定之否定)

// 下面的比較結果是:false
10 == 010;
10 == '-10';
    ES5 提示: 以 0 開頭的數字字面值會被作為八位元字解析。
    而在 ECMAScript 5 strict 模式下,這個特性被移除了。
為了避免上面複雜的強制類型轉換,強烈推薦使用嚴格的等於操作符。
雖然這可以避免大部分的問題,但 JavaScript 的弱類型系統仍然會導致一些其它問題。
內建類型的建構函式
內建類型(比如 Number 和 String)的建構函式在被調用時,使用或者不使用 new 的結果完全不同。

new Number(10) === 10;     // False, 對象與數位比較
Number(10) === 10;         // True, 數字與數位比較
new Number(10) + 0 === 10; // True, 由於隱式的類型轉換

使用內建類型 Number 作為建構函式將會建立一個新的 Number 對象,
而在不使用 new 關鍵字的 Number 函數更像是一個數字轉換器。

另外,在比較中引入對象的字面值將會導致更加複雜的強制類型轉換。
最好的選擇是把要比較的值顯式的轉換為三種可能的類型之一。
轉換為字串
'' + 10 === '10'; // true

將一個值加上Null 字元串可以輕鬆轉換為字串類型。
轉換為數字
+'10' === 10; // true

使用一元的加號操作符,可以把字串轉換為數字。
字串轉換為數位常用方法:
+'010' === 10
Number('010') === 10
parseInt('010', 10) === 10  // 用來轉換為整數

+'010.2' === 10.2
Number('010.2') === 10.2
parseInt('010.2', 10) === 10

轉換為布爾型
通過使用 否 操作符兩次,可以把一個值轉換為布爾型。
!!'foo';   // true
!!'';      // false
!!'0';     // true
!!'1';     // true
!!'-1'     // true
!!{};      // true
!!true;    // true



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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