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






