摘要:所以能用的地方盡量用,相等運算符隱藏的類型轉換,會帶來一些違反直覺的結果。
這是在國外的一道面試題看到的,大家先自己想一下,在什么情況下這個判斷會成立?
按正常思維想,這個是不可能成立的,但nothing is impossible,首先貼上正確答案代碼
const a = { i: 1, toString: function () { return a.i++; } } console.log(a == 1 && a == 2 && a == 3)
這里做判斷時,首先會調用valueOf函數,數組調用valueOf后返回的還是數組本身,就會再次調用toString函數,這里是重寫了toString方法,并且return的是a.i++,所以每調用一次,都會在上次的值得基礎上自加一次,
所以結果為true。
那么舉一反三,這道題再變一下,“a===1 && a===2 && a===3 為true”改成這樣,還能不能成立呢?
最后結果:
這是因為“===”代表全等(嚴格運算符),即值和類型都相等,其原理為“===”不會進行隱式轉換,所以也就不會調用valueOf等方法了,而“==”為值相等(相等運算符),所以在比較不同類型的數據時,相等運算符會先將數據進行類型轉換,然后再用嚴格相等運算符比較。
所以能用“===”的地方盡量用“===”,相等運算符隱藏的類型轉換,會帶來一些違反直覺的結果。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105129.html
摘要:閉包正確的說應該是指一個閉包域每當聲明了一個函數它就產生了一個閉包域可以解釋為每個函數都有自己的函數棧每個閉包域對象都有一個不是屬性內默認有個名為的全局引用有了這個引用就可以直接調用的屬性或方法凡是在閉包域內聲明的變量或方法外部無法直接訪問 閉包 正確的說,應該是指一個閉包域,每當聲明了一個函數,它就產生了一個閉包域(可以解釋為每個函數都有自己的函數棧),每個閉包域(Function...
摘要:收集的一些前端面試題從面試題發現不足,進而查漏補缺,比通過面試更難得及各大互聯網公司前端筆試面試題篇及各大互聯網公司前端筆試面試題篇面試題個和個經典面試題前端開發面試題如何面試前端工程師很重要個變態題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發現不足,進而查漏補缺,比通過面試更難得 1 BAT及各大互聯網公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:收集的一些前端面試題從面試題發現不足,進而查漏補缺,比通過面試更難得及各大互聯網公司前端筆試面試題篇及各大互聯網公司前端筆試面試題篇面試題個和個經典面試題前端開發面試題如何面試前端工程師很重要個變態題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發現不足,進而查漏補缺,比通過面試更難得 1 BAT及各大互聯網公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:這是我在一次面試中,被面試官所提問的一道題在這次面試題中相等指的是對象的屬性個數值相等有這樣兩個李德華張德華我能想到的一種方案解答過程的思考由于沒有,我只能通過轉化成數組進入第二步,對象中的屬性在另一個中是否存在。 這是我在一次面試中,被面試官所提問的一道題 在這次面試題中 相等:指的是對象的屬性個數值相等 有這樣兩個obj let obj1 = { name:李德華, ...
摘要:響應由三個部分組成,分別是狀態行消息報頭響應正文。詳情參考小汪之前寫的文章瀏覽器內核之解釋器和模型解釋解釋過程是指從字符串經過解釋器處理后變成渲染引擎內部規則的表示過程。 showImg(https://segmentfault.com/img/remote/1460000016404846); 前言 小汪最近在看【WebKit 技術內幕】一書,說實話,這本書寫的太官方了,不通俗易懂。...
閱讀 3281·2021-11-25 09:43
閱讀 2084·2021-09-22 10:02
閱讀 3311·2021-09-06 15:00
閱讀 2298·2019-08-30 15:56
閱讀 2347·2019-08-30 15:54
閱讀 3224·2019-08-30 14:14
閱讀 2258·2019-08-29 17:25
閱讀 2902·2019-08-29 17:16