如果覺得還有點(diǎn)用,請(qǐng)您給我一個(gè)贊慌洪!您的贊是我堅(jiān)持下去的動(dòng)力
常用的類型判斷方法有
- target.constructor === Object
判斷target變量的constructor是否為某個(gè)對(duì)象 - typeof target
返回target的值只能是number擂错、string秩仆、undefined隔披、boolean洒疚、function、object
其中一個(gè) - target instanceof Object
判斷target.proto 是否在Object.prototype原型鏈中存在
target和Object必須都是object贮折,并且Object必須有prototype(null,undefined是沒有prototype的) - Object.prototype.toString.call(target)
然后下面的表顯示了4種類型檢測(cè)方法的呈現(xiàn)結(jié)果
總體來說要想很精準(zhǔn)的判斷target是否為某個(gè)類型裤翩,使用 target.constructor最為準(zhǔn)確, typeof和Object.prototype.toString.call用來判斷js常規(guī)類型比較好,其中后者更準(zhǔn)確
==和===
-
==
會(huì)在比較的時(shí)候?qū)㈩愋蛷?qiáng)制轉(zhuǎn)換后對(duì)比 -
===
比較的時(shí)候不會(huì)進(jìn)行類型轉(zhuǎn)換
類型轉(zhuǎn)換
- 幾種需要特別注意的轉(zhuǎn)換結(jié)果:
- Number('f') : NaN
- Number('')/Number(' ')/Number(null): 0
- Boolean(-1)/Boolean(''): false
- Boolean({})/Boolean(' '):true
- String({}): "[object Object]"
什么時(shí)候觸發(fā)類型轉(zhuǎn)換
當(dāng)2個(gè)變量遇見 >调榄、<、==呵扛、加減乘除每庆、||、&& 時(shí)-
轉(zhuǎn)換為什么今穿?
- 默認(rèn)觸發(fā)數(shù)值轉(zhuǎn)換缤灵,可以理解為 Number(left) > Number(right)
- +value: 觸發(fā)數(shù)值轉(zhuǎn)換 Number(value)
- 當(dāng) left + right 中其中一個(gè)是字符串的話,觸發(fā)字符串轉(zhuǎn)換 String(left) + String(right)
- ==:觸發(fā)數(shù)值轉(zhuǎn)換 Number(left) == Number(right)
- null == right : null只同null和undefined相等蓝晒,其他情況均false
- !!:觸發(fā)布爾轉(zhuǎn)換
- 數(shù)組: 數(shù)組先觸發(fā)toString 然后在看對(duì)比對(duì)象進(jìn)行再次轉(zhuǎn)換
- [1,2,3]+[4,5,6] : [1,2,3].toString()+[4,5,6].toString()
- []+null+1: [].toString()+null+1 -> ''+null+1 -> "null"+1 -> "null1"
- ||或&&:觸發(fā)布爾
-
幾個(gè)特別的案例,可以想想為什么腮出?
- []!="" // false
- NaN!=NaN //false
- NaN===NaN //false
- if({})、if([]) //true
- if(0)芝薇、if('') //false
如果覺得還有點(diǎn)用胚嘲,請(qǐng)您給我一個(gè)贊!您的贊是我堅(jiān)持下去的動(dòng)力