在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 類型轉換
arguments 對象
類型轉換
構造函數(shù)
instanceof 操作符
自動分號插入
為什么不要使用 eval
對象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達式
setTimeout 和 setInterval
for in 循環(huán)

類型轉換

JavaScript 是弱類型語言,所以會在任何可能的情況下應用強制類型轉換。

    // 下面的比較結果是:true
    new Number(10) == 10; // Number.toString() 返回的字符串被再次轉換為數(shù)字

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

    // 下面的比較結果是:false
    10 == 010;
    10 == '-10';

ES5 提示:0 開頭的數(shù)字字面值會被作為八進制數(shù)字解析。 而在 ECMAScript 5 嚴格模式下,這個特性被移除了。

為了避免上面復雜的強制類型轉換,強烈推薦使用嚴格的等于操作符。 雖然這可以避免大部分的問題,但 JavaScript 的弱類型系統(tǒng)仍然會導致一些其它問題。

內置類型的構造函數(shù)

內置類型(比如 NumberString)的構造函數(shù)在被調用時,使用或者不使用 new 的結果完全不同。

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

使用內置類型 Number 作為構造函數(shù)將會創(chuàng)建一個新的 Number 對象, 而在不使用 new 關鍵字的 Number 函數(shù)更像是一個數(shù)字轉換器。

另外,在比較中引入對象的字面值將會導致更加復雜的強制類型轉換。

最好的選擇是把要比較的值顯式的轉換為三種可能的類型之一。

轉換為字符串

    '' + 10 === '10'; // true

將一個值加上空字符串可以輕松轉換為字符串類型。

轉換為數(shù)字

    +'10' === 10; // true

使用一元的加號操作符,可以把字符串轉換為數(shù)字。

譯者注字符串轉換為數(shù)字的常用方法:

    +'010' === 10
    Number('010') === 10
    parseInt('010', 10) === 10  // 用來轉換為整數(shù)

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