if(a==1 && a==2 && a==3){ alert('厲害了') }
說句實話開發中誰寫成這樣保證會被打死。面試
不過面試就是面試,有面試官的考量點。api
我理解的點有兩個數組
先說說隱式類型轉換有幾種狀況post
總結一句話,==兩側非Number都會調用Number()轉化後再調用。this
它們四個能夠分兩類,+和其它,咱們都知道+既能夠作運算符也能夠作字符串連接。spa
1+1 = 2 1+"1" = "11" 2-'1' = 1 2*'1' = 2 2-/'1' = 2
除了+號運算符,其它運算符兩側若是有字符串數字的話也是會調用Number轉換再運算。3d
聊到這裏你發現這和題目沒毛關係啊!過來人告訴你 冷靜!往下看code
二、valueOf / toString等原生api的掌握程度對象
針對對象的valueOf / toString等原生api,咱們看數字和對象的比較/數字和對象的運算blog
以上咱們總結單純的隱式類型轉換沒辦法解決問題
js裏除了空字符串、數字0、null、undefined、false、NaN爲假 其它均爲真。
JavaScript調用valueOf方法將對象轉換爲原始值。你不多須要本身調用valueOf方法;當遇到要預期的原始值的對象時,JavaScript會自動調用它。官方是這麼說的。
1 == { valueOf:()=>{ return 1 } } //true
從結果看 對象會自動調用valueOf方法
這樣咱們就能夠改爲:
a = { value :0, valueOf :function(){ this.value++ return this.value } } 1==a //true 2==a //true 3==a //true //結果爲true,每次隱式類型轉換的過程都會自動調用valueOf。 //接下來講toString //都有valueOf了 還說toString幹嗎,的確默認都會調用,只不過有優先級。 //我只能說js做者很牛逼。 //若是同時有包含它們兩個(valueOf和toString會怎麼樣 a = { value :0, valueOf :function(){ this.value++ return this.value+'aa' }, toString:function(){ this.value+=2 return this.value } }
規則就是這樣,當valueOf返回不爲基本類型的時候,回去調用toString方法。
調用了三次結果變爲6
還有一個很騷的方法,是從一個小姐姐博客看到的,http://www.javashuo.com/article/p-mjmicfsr-ch.html
文章第六題:我聊的這個就是這個題,不過感受小姐姐聊得更專業點。
let arr=[1,2,3] arr.join = arr.shift arr ==1 arr ==2 arr ==3 結果完美,不太小姐姐的意思是數組的toString方法會自動觸發數組的join。 這個真是厲害了!