Javascript顯示和隱式類型轉換

1.轉換成字符串程序員

多數的JavaScript宿主環境(好比Node.js和Chrome)都提供了全局函數toString; 與此同時Object.prototype也定義了toString方法,使得全部對象都擁有轉換爲字符串的能力。dom

好比一個Number轉換爲String函數

var n = 1;
n.toString();   // '1'

toString接受一個參數指定進制,默認爲10. 能夠利用這個參數生成包括字母和數字的隨機字符串:spa

Math.random().toString(36).substr(2);

random生成一個0到1的隨機數,36進制的字符集爲[0-9a-z](36個),substr用來截掉起始的"0."。 另外Object.prototype.toString能夠用來檢測JavaScript對象的類型:prototype

var toString = Object.prototype.toString;

toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]

// Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]

// 自定義類型
toString.call(new MyClass);   // [object Object]

 

2.轉換爲數字code

字符串轉換爲數字也是常見需求,一般用來從用戶輸入或文件來得到一個Number,在JavaScript中能夠直接用parseIntparseFloat。 例如:對象

var iNum1 = parseInt("12345red");   //返回 12345
var iNum1 = parseInt("0xA");    //返回 10
var iNum1 = parseInt("56.9");   //返回 56
var iNum1 = parseInt("red");    //返回 NaN
var fNum4 = parseFloat("11.22.33"); //返回 11.22

注意NaN是JavaScript中惟一一個不等於本身的值。(NaN == NaN) === false! 若是遇到非法字符,parseIntparseFloat會忽略以後的全部內容。blog

parseFloat只接受十進制數字的字符串,而parseInt還提供了第二個參數(可選)用來指定字符串表示數字的進制:ip

var iNum1 = parseInt("10", 2);  //返回 2
var iNum2 = parseInt("10", 8);  //返回 8
var iNum3 = parseInt("10", 10); //返回 10

 

3.強制類型轉換字符串

Boolean(0)                // => false - 零
Boolean(new object())   // => true - 對象
Number(undefined)       // =>   NaN
Number(null)              // => 0
String(null)              // => "null"

 

4.隱式類型轉換

隱式類型轉換是最爲隱蔽的地方,不加註意的話很容易在這一點上出錯,對這一點的掌握也體現了JavaScript程序員經驗。 JavaScript會自動轉換表達式中對象的類型以完成表達式求值。

四則運算

加法運算符+是雙目運算符,只要其中一個是String類型,表達式的值即是一個String

對於其餘的四則運算,只有其中一個是Number類型,表達式的值即是一個Number

對於非法字符的狀況一般會返回NaN

'1' * 'a'     // => NaN,這是由於parseInt(a)值爲NaN,1 * NaN 仍是 NaN

判斷語句

判斷語句中的判斷條件須要是Boolean類型,因此條件表達式會被隱式轉換爲Boolean。 其轉換規則同Boolean的構造函數。好比:

var obj = {};
if(obj){
    while(obj);
}

Native代碼調用

JavaScript宿主環境都會提供大量的對象,它們每每很多經過JavaScript來實現的。 JavaScript給這些函數傳入的參數也會進行隱式轉換。例如BOM提供的alert方法接受String類型的參數:

alert({a: 1});    // => [object Object]
相關文章
相關標籤/搜索