if ('hello') {
console.log('hello')
}
輸出hello。
這里if語(yǔ)句括號(hào)里的條件轉(zhuǎn)化為邏輯上的
布爾值作為判斷標(biāo)準(zhǔn),真則輸出第一項(xiàng),假則第二項(xiàng)。
if ('') {
console.log('empty')
}
''空字符串為假,輸出不了第二項(xiàng)。
if (' ') {
console.log('blank')
}
輸出blank,在這里' '有空白字符的空字符串為真的,跟單獨(dú)測(cè)試它的布爾值是沖突的。這是為什么呢?等下面講“==”的時(shí)候,就明白了,測(cè)試時(shí),用的是
' ' == false
然后得到一個(gè)真,這里的==讓這個(gè)成立了,等到了下面,就明白了!
if ([0]) {
console.log('array')
}
輸出array,在這里[0]值為真,但是脫離if后,布爾值也是假的,同上面的情況,也是先特殊處理對(duì)待吧。
if (0.00) {
console.log('0.00')
}
無(wú)法輸出,這里為假,符合它本身的布爾值。
小結(jié):這些都是典型錯(cuò)誤寫法,寫的時(shí)候要像這樣
if (a === ' '){
,,,,,,,,,,,
}
不要寫這種——
if ( a ),,,,,,,
另外,這里的原理是——
undefined false
Null false
Boolean 直接判斷
Number +0,-0,NaN為false,其他為true
String ''為假其他為真
Object true
沒(méi)有真實(shí)值的都為假,除了' ' ,[ ]。有真實(shí)值的都為真,除了數(shù)值正負(fù)0。我覺(jué)得只是想讓if語(yǔ)句更有意義,有應(yīng)用價(jià)值,才會(huì)讓' '或者[0]的布爾值不同于以往。
==的判斷——
規(guī)則就是等號(hào)兩邊的全都向著數(shù)字去轉(zhuǎn)化,不顧一切地轉(zhuǎn)化,最后再比較,所以,以后在if(a == b)會(huì)更麻煩,直接寫成if (a === b)!
原理——
null == undefined
true
Number (null)
0
Number(undefined)
NaN
Boolean中的:
Number (true)
1
Number(false)
0
String轉(zhuǎn)化的結(jié)果是NaN或數(shù)字。
Object用其valueOf值或toString值。
練習(xí)——
'' == 0
真的。''轉(zhuǎn)數(shù)字是0。
' ' == 0
真的。' '轉(zhuǎn)數(shù)字是0。
'' == true
false,true轉(zhuǎn)成1。
'' == false
true,false轉(zhuǎn)成0。
' ' == true
false
' ' == false
true
小結(jié):它兩的數(shù)值都是0,布爾值也都是假。
!' ' == true
取反的優(yōu)先級(jí)大,先取反,轉(zhuǎn)化成布爾,' '的布爾是真,取反為假,數(shù)值為0,真的數(shù)值為1,不等。
!' ' == false
先取反,得0, false數(shù)值化也是0.為真。
'hello' == true
數(shù)值轉(zhuǎn)化得NaN == 1,false
'hello' == false
同上,假。
'0' == true
數(shù)值化為0 == 1,false
'0' == false
同上,真。
同理——
'0.00' == false
true
'00' == false
true
undefined == null
不用轉(zhuǎn),直接規(guī)定為真。
{} ==true
數(shù)值轉(zhuǎn)化為NaN和1,假。
[] == true
數(shù)值轉(zhuǎn)化為0和1,假。
var obj ={
a : 0,
valueOf: function(){return 1}
}
obj == ' [object Object]'
數(shù)值轉(zhuǎn)化,obj取valueOf值,為1。
右邊其實(shí)是字符串,轉(zhuǎn)值為NaN。
不等,為假。
obj == 1
同上,為真。
obj == true
同上,又true轉(zhuǎn)化為1,所以為真。
最后把前面的貌似的沖突來(lái)解釋下——
規(guī)定說(shuō)了:
' '的布爾值為真,當(dāng)時(shí)驗(yàn)證用的是
' ' == false
運(yùn)行得到了true,也就是為假,所以沖突了,源于 == 的用法比較的不是布爾值了,比較的是趨向?qū)δ繕?biāo)的數(shù)值轉(zhuǎn)化的結(jié)果的比較了,都是0,所以這句話是真,但是證明不了兩者間的布爾值哦,那布爾值如何得到??
請(qǐng)記結(jié)論就好了。
至于那個(gè)[0]也是如此的套路了。
這里的啟發(fā)是什么?
慎用 ==,還有if (a)也經(jīng)常出錯(cuò),都不如if (a === b)。
包括練習(xí)題,那些寫法都是容易產(chǎn)生歧義的,讓人看不懂,自己寫就要,寫的有邏輯,還要明顯體現(xiàn),用小括號(hào)哦。
js類型轉(zhuǎn)換練習(xí)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 小學(xué)語(yǔ)文修改病句的方法 修改病句是小學(xué)語(yǔ)文考試中常見的題型,在修改病句之前,我們應(yīng)該清晰的了解有哪些病句現(xiàn)象,下面...
- 從類型說(shuō)起 js只有7種類型: 原始類型(primitives types)booleannumber包括Infi...
- ECMAScript:標(biāo)準(zhǔn)、核心HTML 標(biāo)簽類型:block、inline、inline-block、table...
- 價(jià)值觀修煉—— 持續(xù)確認(rèn),自我激活,公開主張,不斷踐行。 目標(biāo)就在眼前,遠(yuǎn)方不在遙遠(yuǎn)。
- 一種也沒(méi)什么特別的動(dòng)物,卻做出了人類進(jìn)化史上讓人至今未解的事情。 這個(gè)chapter主要講述了人種的進(jìn)化以及最...