先看一道面試題 讓 a==1&&a==2&&a==3,這個問題主要查看對js隱式轉(zhuǎn)換的理解,首先a不可能是一個原始類型,那么a只有可能是個對象類型了,查閱犀牛書52頁《3.8.3對象轉(zhuǎn)換為原始值》章節(jié)得知,對象轉(zhuǎn)換到字符串或者數(shù)字類型調(diào)用了toString()和valueOf()兩個方法中的一個,具體細節(jié)如下
- 對象轉(zhuǎn)換為字符串
如果對象具有toString()方法,則調(diào)用這個方法,如果它返回一個原始值,將這個值轉(zhuǎn)換為字符串類型,例如:
對象轉(zhuǎn)換為字符串例子1
如果對象沒有toString()方法,或者這個方法并不返回一個原始值,那么就調(diào)用valueOf()方法,如果valueOf()返回原始值,則將它轉(zhuǎn)換為字符串類型,例如:
對象轉(zhuǎn)換為字符串例子2
對象轉(zhuǎn)換為數(shù)字的過程調(diào)用valueOf()方法返回一個原始值,并轉(zhuǎn)換為數(shù)字類型,如果沒有valueOf()方法,則調(diào)用toString()方法,過程同對象轉(zhuǎn)換為字符串相似
對象轉(zhuǎn)換為數(shù)字例子
詳細的js類型轉(zhuǎn)換方式看下表格:
== 相等比較
- 一個值是undefined,另一個值是null,則它們相等,即 undefined == null;
- 一個值是數(shù)字,另一個值是字符串,則先將字符串轉(zhuǎn)換為數(shù)字,然后比較, '123' == 123 轉(zhuǎn)換為123 == 123 // true
- 如果有一個是true,則先轉(zhuǎn)換為1,再比較,false則轉(zhuǎn)換為0再比較
- 如果有一個是對象,另一個是原始類型,見本章所述
=== 相等比較
- 先查看類型是否相等,不相等就false
- null === undefined // false
- NaN === NaN // false
- 0 === -0 // true
- 先查看類型是否相等,不相等就false,相等就查看值是否相等,原始類型比較的是值,對象類型則比較地址是否相等,不相等就false,相等就true
各位觀眾老爺,以上文章和圖片若有看不明白的地方可以私聊或者留言