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中能夠直接用parseInt
和parseFloat
。 例如:對象
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
! 若是遇到非法字符,parseInt
和parseFloat
會忽略以後的全部內容。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]