js
類型判斷
js
八種數(shù)據(jù)類型:
Undefined
, String
, Symbol
, Object
, Number
, Null
, Boolean
, BigInt
取首字母記憶:u so nb
typeof
返回類型:
undefined
, string
, symbol
, object
, number
, boolean
, bigint
, function
typeof null //"object"
typeof [] //"object"
typeof {} //"object"
typeof NaN //"number"
typeof function(){} //"function"
typeof (() => {}) //"function"
typeof BigInt(1) //"bigint"
typeof Symbol() //"symbol"
typeof "" //"string"
typeof saxon_y //"undefined"
typeof undefined //"undefined"
typeof !null //"boolean"
如果要判斷數(shù)組漏峰,考慮到 instanceof
某些IE版本瀏覽器不兼容为严,下面這種方法兼容性相對較好:
if(typeof Array.isArray==="undefined")
{
Array.isArray = function(arr){
return Object.prototype.toString.call(arr)==="[object Array]"
};
}
js
中的 ==
與 ===
在使用 ==
做判斷時 js
做了隱式類型轉(zhuǎn)換,比如 "1" == 1
返回 true
缎玫,而 ===
則不會類型轉(zhuǎn)換膊爪,會首先判斷兩個值的類型是否相同懊蒸,如果相同再進行比較测秸,故 “1” === 1
返回 false
具體轉(zhuǎn)換邏輯大致分四種情況(同類型比較除外兴使,如:number == number
):
-
object == string
袜香,先接將object
類型轉(zhuǎn)換為string
類型后再進行比較 -
object == (number/boolean)
,先將object
類型轉(zhuǎn)換為string
類型鲫惶,再將string
類型轉(zhuǎn)換為number
類型蜈首,和另一個值比較,如果另一個值不是number
類型先將其轉(zhuǎn)換為number
類型 - 其他比較如:
number == boolean
欠母,string == boolean
欢策,將不是number
類型的值轉(zhuǎn)換為number
類型再做比較 -
null == undefined ==> true
,null === undefined ==> false
赏淌,null
或者undefined
和其他任何的數(shù)據(jù)類型比較都返回false
[1,2] == '1,2' //true踩寇,[1,2].toString() ==> "1,2"
(function(){console.log('hello')}) == "function(){console.log('hello')}" //true
[1] == true //true,[1].toString() ==> "1"六水,Number("1") ==> 1俺孙,Number(true) ==> 1
[12] == 12 //true,[12].toString() ==> "12"掷贾,Number("12") ==> 12
常見的類型轉(zhuǎn)換:
Number(false) //0
Number(true) //1
Number("") //0
[].toString() //""
Boolean(+0) //false
Boolean(-0) //false
Boolean(+2) //true
Boolean(-2) //true睛榄,所有非0數(shù)轉(zhuǎn)換boolean都是true,NaN除外
Boolean(BigInt(1)) //true
Boolean(BigInt(0)) //false
注意點:
NaN == NaN ==> false
!
取反操作:
!!
轉(zhuǎn)換 boolean
值想帅,除了 0 NaN "" null undefined
其他都為 true
面試吵⊙ィ考題:
[] == false //true,先將 [] 轉(zhuǎn)為字符串 "" ,再將 "" 轉(zhuǎn)為數(shù)字 0旨剥,false也轉(zhuǎn)換為數(shù)字 0咧欣,故返回 true
!![] == false //false,因 ! 優(yōu)先級比 == 高轨帜,所以先將計算 !![] 為true魄咕,true == false,故返回false
點贊蚌父、收藏的人已經(jīng)開上蘭博基尼了 (′▽`???)
轉(zhuǎn)載請注明出處2侠瘛!I沂病(http://www.reibang.com/p/1baaf97d0b1a)