詳解JavaScript中的類型判斷與類型轉(zhuǎn)換
類型判斷
typeof:只能判斷原始類型,并且判斷null的時候會判斷出null為'object';使用typeof判斷 引用類型時:只能判斷出function
Object.prototype.toString(): 因為區(qū)別對象、數(shù)組、函數(shù)單純使用 typeof 只能判斷為object對象,但是可以通過Object.prototype.toString方法,判斷某個對象值屬于哪種內(nèi)置類型。 例:[object String] 1).如果this值是undefined,就會返回 [object Undefined] 2).如果this值是null,就會返回 [object Null] 3).生成變量 o,讓 o 成為ToObject(this)的結(jié)果 4).讓class成為 o 的內(nèi)部屬性[[class]]的值 5).最后返回由"[object 和 class 和 "]" 三個部分組成的字符串
例: console.log(Object.prototype.toString.call(new Date())); //[object Date]
- 數(shù)組身上的判斷方法:Array.isArray()
Array.isArray()方法用來判斷某個方法是否是數(shù)組并且返回一個布爾值
- instanceof:只能判斷引用類型,不能判斷原始類型,它是順著原型鏈找的 ;但是數(shù)組也是屬于Object 也可以判斷出它是Object;instanceof用于檢測構(gòu)造函數(shù)的
prototype
屬性是否出現(xiàn)在某個實例對象的原型鏈上。
類型轉(zhuǎn)換
對象轉(zhuǎn)原始類型
js的類型轉(zhuǎn)換只有三種類型的轉(zhuǎn)換: to string, to boolean, to number
轉(zhuǎn)number
調(diào)用 ToPrimitive (obj,Number)
- 如果obj是基本類型,直接返回
- 否則,調(diào)用ValueOf方法,如果得到一個原始類型.則返回
- 否則,調(diào)用toString方法,如果得到一個原始類型.則返回
- 否則報錯 []==![] Number({})//NaN
轉(zhuǎn)string
調(diào)用ToPrimitive (obj,String)
- 如果obj是基本類型,直接返回
- 否則,調(diào)用toString方法,如果得到一個原始類型.則返回
- 否則,調(diào)用ValueOf方法,如果得到一個原始類型.則返回
- 否則報錯
隱式轉(zhuǎn)換
一元操作符 : +'1'=>Number(1)=1 '+'會觸發(fā)Number()
當(dāng)+運算作為一元操作符時,會調(diào)用ToString()處理該值
二元操作符
v1+v2
- lprim=ToPrimitive(v1)
- rprim=ToPrimitive(v2)
- 如果lprim或rprim是字符串,那么返回 ToString(lprim)和ToString(rprim)的拼接結(jié)果
- 否則返回ToNumber(lprim)和否則ToNumber(rprim)的相加結(jié)果
==
當(dāng)執(zhí)行 x == y 時,
如果x和y是同一類型,
如果x是undefined,返回true
如果x是null,返回true
x是數(shù)字 x是NaN,返回false
如果x和y指向同一個對象,返回true,否則返回fasle
特例: null == undefined //true
1 == 'h' 會先ToNumber('h')再判斷
false == '1' 會先ToNumber('false') ToNumber('1')
true == {a:1} // ToPrimitive({a:1})
[] == ![]
!運算符優(yōu)先級更高 先執(zhí)行![] !為布爾 ![]為false []==false 然后有==將這兩個向Number靠近 []為引用類型,調(diào)用ToPrimitive() 然后先調(diào)用valueOf()沒有 再調(diào)用toString()轉(zhuǎn)換成'' ''再轉(zhuǎn)換成0 false轉(zhuǎn)換成0 所以[] == ![]
到此這篇關(guān)于詳解JavaScript中的類型判斷與類型轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)JavaScript類型判斷與轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一起來學(xué)習(xí)JavaScript的BOM操作
這篇文章主要為大家詳細介紹了JavaScript BOM操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03JavaScript實現(xiàn)復(fù)制文章自動添加版權(quán)
自己辛辛苦苦寫的文章,輕易就被別人復(fù)制-粘貼去了,是不是很傷心呢?小編今天給大家整理了兩個方法,讓別人復(fù)制自己的文章時,自動在文章的結(jié)尾添加自己的版權(quán)信息。2016-08-08javascript使用canvas實現(xiàn)餅狀圖效果
這篇文章主要為大家詳細介紹了javascript使用canvas實現(xiàn)餅狀圖效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-09-09typescript+react實現(xiàn)移動端和PC端簡單拖拽效果
這篇文章主要為大家詳細介紹了typescript+react實現(xiàn)移動端和PC端簡單拖拽效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09javascript addLoadEvent函數(shù)說明
網(wǎng)頁加載完整后會觸發(fā)一個onload事件,默認(rèn)地一個事件只能和一個函數(shù)綁定。2010-01-01