生活随笔
收集整理的這篇文章主要介紹了
[]==![]为true
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?!的優(yōu)先級比==要高,所以會(huì)先執(zhí)行![]。也就是先把[]轉(zhuǎn)為布爾類型再取反。[]轉(zhuǎn)布爾值是true,為什么呢?因?yàn)樵贘avaScript里除了false自身以外只有5個(gè)假值,分別是“”,undefined, null, 0, NaN。除了這5個(gè)假值以外,其他所有值轉(zhuǎn)布爾類型都是true。一切對象都是真值,包括new Boolean(false)。于是問題就成了 [] == false了當(dāng)"=="號兩邊其中一個(gè)是布爾值的話,先把它轉(zhuǎn)換為數(shù)字(ECMAScript的規(guī)范)。于是就變成了求[] == 0。當(dāng)"=="的一邊是字符串或數(shù)字,另一邊是對象的時(shí)候(數(shù)組也是對象),先把對象值轉(zhuǎn)換為原始值再判斷相等。對象值到原始值是怎么轉(zhuǎn)換的呢?.對于所有非日期雷對象來說,對象到原始值的轉(zhuǎn)換基本上就是對象到數(shù)字的轉(zhuǎn)換。有3個(gè)步驟:1.所有對象先調(diào)用valueOf()方法,如果此方法返回的是原始值,則對象轉(zhuǎn)為這個(gè)原始值。?2.如果valueOf方法返回的不是原始值,則調(diào)用toString方法,如果toString方法返回的是原始值嗎,則對象轉(zhuǎn)換為這個(gè)原始值。?3.如果valueOf和toString方法均沒有返回原始值,則拋出TypeError異常.?請看筆記"關(guān)于 valueOf() 和 toString()"[]到原始值的轉(zhuǎn)換是怎么樣的?首先調(diào)用[].valueOf()方法,返回值是對象自身,即[],這不是一個(gè)原始值。所以繼續(xù)調(diào)用[].toString()方法,返回的是空字符串"",這是一個(gè)原始值,所以此值就作為對象轉(zhuǎn)換為原始值的輸出。于是問題就變成了求"" == 0.當(dāng)"=="兩邊一個(gè)是字符串一個(gè)是數(shù)字的時(shí)候,先把字符串轉(zhuǎn)為數(shù)字,再進(jìn)行比較。“”轉(zhuǎn)成數(shù)字為0,所以最后得出[] == false為true。來自?http://my.oschina.net/u/1274710/blog/293733
轉(zhuǎn)載于:https://www.cnblogs.com/bestend/p/4459525.html
總結(jié)
以上是生活随笔為你收集整理的[]==![]为true的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。