js類型轉(zhuǎn)換練習(xí)

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)哦。








最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容