JavaScript顯式數(shù)據(jù)類型轉(zhuǎn)換詳解
基本概念
將值從一種類型轉(zhuǎn)換為另一種類型稱為類型轉(zhuǎn)換,類型轉(zhuǎn)換總是返回基本類型值,如字符串、數(shù)字和布爾值,不會(huì)返回引用類型值。
類型轉(zhuǎn)換分為“顯式”和“隱式”:“顯式”轉(zhuǎn)換發(fā)生在靜態(tài)類型語(yǔ)言的編譯階段,而“隱式”轉(zhuǎn)換則發(fā)生在動(dòng)態(tài)類型語(yǔ)言的運(yùn)行時(shí)。
顯式類型轉(zhuǎn)換
非字符串到字符串的類型轉(zhuǎn)換
toString()
方法
數(shù)字、布爾值、字符串和對(duì)象都有 toString() 方法,但 null 和 undefined 沒(méi)有。
例子:
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 引擎會(huì)自動(dòng)為基本類型值創(chuàng)建一個(gè)封裝對(duì)象,然后對(duì)該對(duì)象調(diào)用 toString()。
String()
方法
這個(gè)方法能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換為字符串,基本的轉(zhuǎn)換規(guī)則是:
1、如果值有toString()方法,則調(diào)用該方法進(jìn)行轉(zhuǎn)換;
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"
非數(shù)字到數(shù)字的類型轉(zhuǎn)換
Number()
方法
這個(gè)方法可以用于任何數(shù)據(jù)類型,基本的轉(zhuǎn)換規(guī)則是:
1、如果是Boolean值,true和false將分別被轉(zhuǎn)換為1和0;
2、如果是數(shù)字值,只是簡(jiǎn)單的傳入和返回;
3、如果是null值,返回0;
4、如果是undefined值,返回NaN;
5、如果是字符串,遵循下列規(guī)則:
- 如果字符串中只包含數(shù)字,將其轉(zhuǎn)換為十進(jìn)制。即“123”轉(zhuǎn)換為123,“011”轉(zhuǎn)換為11(忽略前導(dǎo)0);
- 如果字符串中包含有效的浮點(diǎn)格式,如“1.1”將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù)值(同樣忽略前導(dǎo)0);
- 如果字符串是空的,不包含任何字符,則將其轉(zhuǎn)換為0;
- 如果字符串中包含除上述以外的字符,則將其轉(zhuǎn)換為NaN。
6、如果是對(duì)象,會(huì)首先檢查該值是否有 valueOf() 方法。如果有,并且可以成功返回基本類型值,那么就使用該方法的返回值進(jìn)行強(qiáng)制類型轉(zhuǎn)換;如果沒(méi)有就使用 toString() 的返回值來(lái)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。如果 valueOf() 和 toString() 均不返回基本類型值,會(huì)產(chǎn)生 TypeError 錯(cuò)誤。
*valueOf() 和 toString() 都屬于 Object 的原型方法,valueOf() 返回類型不變的原始值而非值的字符串形式。
例子:
console.log(Number(true)); //輸出:1 console.log(Number(10)); //輸出:10 console.log(Number(null)); //輸出:0 console.log(Number(undefined)); //輸出:NaN console.log(Number("123")); //輸出:123 console.log(Number("01")); //輸出:1 console.log(Number("1.1")); //輸出:1.1 console.log(Number("")); //輸出:0 console.log(Number("love")); //輸出:NaN //轉(zhuǎn)換過(guò)程:{name: "Tom"} => "[object Object]" => NaN console.log(Number({ name: "Tom" })); //輸出:NaN //轉(zhuǎn)換過(guò)程:[1,2] => "1,2" => NaN console.log(Number([1, 2])); //輸出:NaN //轉(zhuǎn)換過(guò)程:[999] => "999" => 999 console.log(Number([999])); //輸出:999 console.log(Number(new Date)); //以微秒為單位的數(shù)字時(shí)間
parseInt()
方法
這個(gè)方法是專門用于把字符串轉(zhuǎn)換成整數(shù)的,非字符串參數(shù)會(huì)首先被強(qiáng)制轉(zhuǎn)換為字符串,它的基本轉(zhuǎn)換規(guī)則是:
1、如果第一個(gè)字符不是數(shù)字或者負(fù)號(hào),返回NaN;
2、如果第一個(gè)字符是數(shù)字,會(huì)繼續(xù)解析第二個(gè)字符,直到解析完所有后續(xù)字符或者遇到了一個(gè)非數(shù)字字符。
例子:
例子:
//非字符串類型 //轉(zhuǎn)換過(guò)程:10.1 => "10.1" => 10 console.log(parseInt(10.1)); //輸出:10 //轉(zhuǎn)換過(guò)程:0.0000008 => "8e-7" => 8 console.log(parseInt(0.0000008)); //輸出:8 //字符串類型 console.log(parseInt("10abc")); //輸出:10 console.log(parseInt("abc")); //輸出:NaN
*從 ES5 開(kāi)始,parseInt() 默認(rèn)轉(zhuǎn)換為十進(jìn)制數(shù),如果需要轉(zhuǎn)換其他基數(shù)(即多少進(jìn)制),可以為這個(gè)函數(shù)提供第二個(gè)參數(shù),例如:parseInt( “0xAF”, 16 ) 。
parseFloat() 方法與 parseInt() 類似,用于解析浮點(diǎn)數(shù)。字符串中的第一個(gè)小數(shù)點(diǎn)是有效的,而第二個(gè)小數(shù)點(diǎn)是無(wú)效的。除此之外,parseFloat() 方法只能解析十進(jìn)制數(shù)。
例子:
console.log(parseFloat("10abc")); //輸出:10
console.log(parseFloat("11.22.33")); //輸出:11.22
console.log(parseFloat("011.22")); //輸出:11.22
非布爾值到布爾值的類型轉(zhuǎn)換
Boolean()
方法
可以對(duì)任何數(shù)據(jù)類型的值調(diào)用 Boolean() 方法,而且總會(huì)返回一個(gè) Boolean 值,基本的轉(zhuǎn)換規(guī)則是:
1、以下這些是可以被轉(zhuǎn)換為 false 的值:
- undefined
- null
- false
- +0、-0 和 NaN
- “”
2、上面列舉之外的值都是可以被轉(zhuǎn)換為 true 的值。
例子:
console.log(Boolean(undefined)); //輸出:false console.log(Boolean(null)); //輸出:false console.log(Boolean(false)); //輸出:false console.log(Boolean(0)); //輸出:false console.log(Boolean(-0)); //輸出:false console.log(Boolean(NaN)); //輸出:false console.log(Boolean("")); //輸出:false
所有的對(duì)象都是可以被轉(zhuǎn)換為 true 的值,包括使用Boolean、 Number 和 String 來(lái)創(chuàng)建的基本包裝類型的對(duì)象。
例子:
console.log(Boolean(new Boolean(false))); //輸出:true console.log(Boolean(new Number(0))); //輸出:true console.log(Boolean(new String(""))); //輸出:true console.log(Boolean([])); //輸出:true console.log(Boolean({})); //輸出:true
如有錯(cuò)誤,歡迎指正,本人不勝感激。
以上所述是小編給大家介紹的JavaScript顯式數(shù)據(jù)類型轉(zhuǎn)換詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JavaScript 基本數(shù)據(jù)類型轉(zhuǎn)換你了解嘛
- JavaScript數(shù)據(jù)類型轉(zhuǎn)換實(shí)例(其他類型轉(zhuǎn)字符串、數(shù)值型、布爾類型)
- JavaScript數(shù)據(jù)類型轉(zhuǎn)換詳解(推薦)
- JavaScript的數(shù)據(jù)類型轉(zhuǎn)換原則(干貨)
- javascript基本數(shù)據(jù)類型和轉(zhuǎn)換
- JavaScript中數(shù)據(jù)類型轉(zhuǎn)換總結(jié)
- 詳解Javascript數(shù)據(jù)類型的轉(zhuǎn)換規(guī)則
- 全面了解JavaScript的數(shù)據(jù)類型轉(zhuǎn)換
- JavaScript實(shí)現(xiàn)數(shù)據(jù)類型的相互轉(zhuǎn)換
- JavaScript中的數(shù)據(jù)類型轉(zhuǎn)換方法小結(jié)
- 淺談JavaScript數(shù)據(jù)類型及轉(zhuǎn)換
- Javascript基礎(chǔ)教程之?dāng)?shù)據(jù)類型轉(zhuǎn)換
- js 數(shù)據(jù)類型轉(zhuǎn)換總結(jié)筆記
- JavaScript數(shù)據(jù)類型轉(zhuǎn)換
相關(guān)文章
簡(jiǎn)介JavaScript中fixed()方法的使用
這篇文章主要介紹了JavaScript中fixed()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06JavaScript基礎(chǔ)學(xué)習(xí)之splice()函數(shù)詳解
在前端JavaScript編程過(guò)程中,為了開(kāi)發(fā)出更具交互性的web應(yīng)用,需要對(duì)一些數(shù)組進(jìn)行處理,下面這篇文章主要給大家介紹了關(guān)于JavaScript基礎(chǔ)學(xué)習(xí)之splice()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-04-04淘寶網(wǎng)提供的國(guó)內(nèi)NPM鏡像簡(jiǎn)介和使用方法
我們以前介紹過(guò)cnpmjs.org,非常棒的npm國(guó)內(nèi)鏡像。由于其使用量越來(lái)越大,加上淘寶內(nèi)部也有很多項(xiàng)目使用 NodeJS,于是,淘寶正式基于 cnpmjs 推出了鏡像服務(wù)2014-04-04淺談JavaScript function函數(shù)種類
這篇文章主要介紹了JavaScript function函數(shù)種類,包括普通函數(shù)、匿名函數(shù)、閉包函數(shù)、十分的全面,并附上了示例,這里推薦給大家,希望對(duì)大家能有所幫助。2014-12-12深入Javascript函數(shù)、遞歸與閉包(執(zhí)行環(huán)境、變量對(duì)象與作用域鏈)使用詳解
本篇文章對(duì)Javascript中函數(shù)、遞歸與閉包(執(zhí)行環(huán)境、變量對(duì)象與作用域鏈)的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05JavaScript基礎(chǔ)之Array?forEach使用示例
這篇文章主要為大家介紹了JavaScript基礎(chǔ)之Array?forEach使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12JavaScript事件處理器中的event參數(shù)使用介紹
當(dāng)一個(gè)事件處理器被觸發(fā)時(shí),名為Event的類實(shí)例會(huì)作為第一個(gè)參數(shù)傳入處理器中,下面為大家詳細(xì)介紹下它的應(yīng)用2013-05-05javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)詳解
這篇文章主要介紹了javascript設(shè)計(jì)模式之對(duì)象工廠函數(shù)與構(gòu)造函數(shù)詳解,使用對(duì)象字面量,或者向空對(duì)象中動(dòng)態(tài)地添加新成員,是最簡(jiǎn)單易用的對(duì)象創(chuàng)建方法,除了這兩種常用的對(duì)象創(chuàng)建方式,JavaScript還提供了其他方法創(chuàng)建對(duì)象,需要的朋友可以參考下2015-07-07