在cssrain整理的一個(gè) 試題集 中有這么一道題:
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
按照我的理解,任何非0的數(shù)值的布爾值都應(yīng)該為true。
可是這道題的正確輸出為:false false true。
(-1==true)的值為false。
再來(lái)看下面這個(gè)例子:
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
運(yùn)行結(jié)果依次為:false,true,true。
在這里,我們發(fā)現(xiàn),if(aVar) 和 if(aVar == true)的結(jié)果并不相同。
cssrain在 答案 中的解釋是:
if(aVar) 和 if (aVar==true) 對(duì)負(fù)數(shù)有截然不同的答案。
真的是負(fù)數(shù)的原因嗎?看下面這個(gè)例子:
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
為什么正數(shù)2返回的也是false呢。我們將數(shù)字轉(zhuǎn)換為boolean值看看。
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
這里非0數(shù)值的布爾值的確都是true,也就是說(shuō)所有的問(wèn)題都集中在2==true中的==運(yùn)算符上。基本可以確定,==一定不是把數(shù)字轉(zhuǎn)換為布爾值再進(jìn)行比較。
看看ECMA-262(第80頁(yè))中怎么說(shuō)的:
6.If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
7.If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
也就是說(shuō),布爾值會(huì)被首先轉(zhuǎn)換為數(shù)字,然后進(jìn)行比較。true的數(shù)字值為1,false為0。所以2和-1都不能和true相等。
進(jìn)一步看下面這個(gè)例子:
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
按照前面的思路,true會(huì)被轉(zhuǎn)換為1,所以三個(gè)語(yǔ)句都會(huì)返回false。運(yùn)行一下,發(fā)現(xiàn)的確如此。
下面將if(aVar==true)改為if(aVar)。
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
這時(shí)的運(yùn)行結(jié)果是true,true,false。因?yàn)锽oolean("undefined")、Boolean("false")、Boolean("")的結(jié)果為true,true,false。非空字符串轉(zhuǎn)換為布爾值true。
最后還有一個(gè)例子,解釋當(dāng)==兩邊為字符串和數(shù)字時(shí)的比較規(guī)律。
運(yùn)行代碼框
[Ctrl+A 全部選擇 提示:你可先修改部分代碼,再按運(yùn)行]
發(fā)現(xiàn)沒(méi),這個(gè)"001"==true是為true的。
因?yàn)閠rue先被轉(zhuǎn)換為1了。然后參考ECMA的規(guī)則:
4.If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).
5.If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.
字符串要被轉(zhuǎn)換為數(shù)字,Number("001")的值也為1,所以結(jié)果為true。
Copyright@ 2011-2016 版權(quán)所有:大連千億科技有限公司 遼ICP備11013762-3號(hào) google網(wǎng)站地圖 百度網(wǎng)站地圖 網(wǎng)站地圖
公司地址:大連市沙河口區(qū)中山路692號(hào)辰熙星海國(guó)際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經(jīng)許可,任何模仿本站模板、轉(zhuǎn)載本站內(nèi)容等行為者,本站保留追究其法律責(zé)任的權(quán)利! 隱私權(quán)政策聲明