基本概念
將值從一種類型轉換為另一種類型稱為類型轉換,類型轉換總是返回基本類型值,如字符串、數字和布爾值,不會返回引用類型值。
類型轉換分為“顯式”和“隱式”:“顯式”轉換發生在靜態類型語言的編譯階段,而“隱式”轉換則發生在動態類型語言的運行時。
顯式類型轉換
非字符串到字符串的類型轉換
toString()
方法
數字、布爾值、字符串和對象都有 toString() 方法,但 null 和 undefined 沒有。
例子:
var name = "Tom", age = 19, isStudent = true;console.log(name.toString()); //輸出:"Tom"console.log(age.toString()); //輸出:"19"console.log(isStudent.toString()); //輸出:"true"var obj = { name: "Tom" }, arr = [19, 20];console.log(obj.toString()); //輸出:"[object Object]"console.log(arr.toString()); //輸出:"19,20"
*基本類型值不能直接使用 toString() 方法,所以 JavaScript 引擎會自動為基本類型值創建一個封裝對象,然后對該對象調用 toString()。
String()
方法
這個方法能夠將任何類型的值轉換為字符串,基本的轉換規則是:
1、如果值有toString()方法,則調用該方法進行轉換;
2、如果值是null,則返回“null”;
3、如果值是undefined,則返回“undefined”。
例子:
console.log(String(11)); //輸出:"11"console.log(String(true)); //輸出:"true"console.log(String("love")); //輸出:"love"console.log(String(null)); //輸出:"null"console.log(String(undefined)); //輸出:"undefined"console.log(String({ name: "Tom"})); //輸出:"[object Object]"console.log(String([1, 2])); //輸出:"1,2"
非數字到數字的類型轉換
Number()
方法
這個方法可以用于任何數據類型,基本的轉換規則是:
1、如果是Boolean值,true和false將分別被轉換為1和0;
2、如果是數字值,只是簡單的傳入和返回;
3、如果是null值,返回0;
4、如果是undefined值,返回NaN;
5、如果是字符串,遵循下列規則:
6、如果是對象,會首先檢查該值是否有 valueOf() 方法。如果有,并且可以成功返回基本類型值,那么就使用該方法的返回值進行強制類型轉換;如果沒有就使用 toString() 的返回值來進行強制類型轉換。如果 valueOf() 和 toString() 均不返回基本類型值,會產生 TypeError 錯誤。
*valueOf() 和 toString() 都屬于 Object 的原型方法,valueOf() 返回類型不變的原始值而非值的字符串形式。
例子:
console.log(Number(true)); //輸出:1console.log(Number(10)); //輸出:10console.log(Number(null)); //輸出:0console.log(Number(undefined)); //輸出:NaNconsole.log(Number("123")); //輸出:123console.log(Number("01")); //輸出:1console.log(Number("1.1")); //輸出:1.1console.log(Number("")); //輸出:0console.log(Number("love")); //輸出:NaN//轉換過程:{name: "Tom"} => "[object Object]" => NaNconsole.log(Number({ name: "Tom"})); //輸出:NaN//轉換過程:[1,2] => "1,2" => NaNconsole.log(Number([1, 2])); //輸出:NaN//轉換過程:[999] => "999" => 999console.log(Number([999])); //輸出:999console.log(Number(new Date)); //以微秒為單位的數字時間
parseInt()
方法
這個方法是專門用于把字符串轉換成整數的,非字符串參數會首先被強制轉換為字符串,它的基本轉換規則是:
1、如果第一個字符不是數字或者負號,返回NaN;
2、如果第一個字符是數字,會繼續解析第二個字符,直到解析完所有后續字符或者遇到了一個非數字字符。
例子:
例子:
//非字符串類型//轉換過程:10.1 => "10.1" => 10console.log(parseInt(10.1)); //輸出:10//轉換過程:0.0000008 => "8e-7" => 8console.log(parseInt(0.0000008)); //輸出:8//字符串類型console.log(parseInt("10abc")); //輸出:10console.log(parseInt("abc")); //輸出:NaN
*從 ES5 開始,parseInt() 默認轉換為十進制數,如果需要轉換其他基數(即多少進制),可以為這個函數提供第二個參數,例如:parseInt( “0xAF”, 16 ) 。
parseFloat() 方法與 parseInt() 類似,用于解析浮點數。字符串中的第一個小數點是有效的,而第二個小數點是無效的。除此之外,parseFloat() 方法只能解析十進制數。
例子:
console.log(parseFloat("10abc")); //輸出:10console.log(parseFloat("11.22.33")); //輸出:11.22console.log(parseFloat("011.22")); //輸出:11.22
非布爾值到布爾值的類型轉換
Boolean()
方法
可以對任何數據類型的值調用 Boolean() 方法,而且總會返回一個 Boolean 值,基本的轉換規則是:
1、以下這些是可以被轉換為 false 的值:
2、上面列舉之外的值都是可以被轉換為 true 的值。
例子:
console.log(Boolean(undefined)); //輸出:falseconsole.log(Boolean(null)); //輸出:falseconsole.log(Boolean(false)); //輸出:falseconsole.log(Boolean(0)); //輸出:falseconsole.log(Boolean(-0)); //輸出:falseconsole.log(Boolean(NaN)); //輸出:falseconsole.log(Boolean("")); //輸出:false
所有的對象都是可以被轉換為 true 的值,包括使用Boolean、 Number 和 String 來創建的基本包裝類型的對象。
例子:
console.log(Boolean(new Boolean(false))); //輸出:trueconsole.log(Boolean(new Number(0))); //輸出:trueconsole.log(Boolean(new String(""))); //輸出:trueconsole.log(Boolean([])); //輸出:trueconsole.log(Boolean({})); //輸出:true
如有錯誤,歡迎指正,本人不勝感激。
以上所述是小編給大家介紹的JavaScript顯式數據類型轉換詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!
新聞熱點
疑難解答