摘要:由于中復雜的類型轉換機制,將會使得由此產生的錯誤變得難以追蹤。此外,類型的強制轉換會對性能也造成一定的影響,例如,當一個字符串與數字進行比較時,會被強制轉換為數字。詳解一下中的比較參考
Javascript 有兩種方法來判斷兩種值是否相等。
相等符號相等符號由兩個等號組成: ==
Javascript 是弱類型語言。這就意味著相等符號為了比較兩個值將會強制轉換類型。
"" == "0" // false 0 == "" // true 0 == "0" // true false == "false" // false false == "0" // true false == undefined // false false == null // false null == undefined // true " " == 0 // true
上面的代碼展示了類型轉換的結果,因此我們知道使用相等符號 == 是個不好的編程習慣。由于 Javascript 中復雜的類型轉換機制,將會使得由此產生的錯誤變得難以追蹤。
此外,類型的強制轉換會對性能也造成一定的影響,例如,當一個字符串與數字進行比較時,會被強制轉換為數字。
嚴格相等符號由三個等號組成: ===
它跟相等符號的操作相似,但是嚴格相等符號不會做強制類型轉換的操作。
"" === "0" // false 0 === "" // false 0 === "0" // false false === "false" // false false === "0" // false false === undefined // false false === null // false null === undefined // false " " === 0 // false
上面的代碼使得代碼更加清晰,如果兩個值的類型不同則直接返回 false,這也會使得性能得到提升。
比較對象盡管 == 和 === 被稱為相等符號,但是當比較的兩個值中有一個類型是對象時,表現將大不相同。
{} === {}; // false new String("foo") === "foo"; // false new Number(10) === 10; // false var foo = {}; foo === foo; // true
在這兒,不再僅僅是比較兩個值是否相等,它將判斷兩個值是否引用同一個對象實例,這個行為比較像 C 中的指針。
總結這里強烈建議只使用嚴格相等符號 ===。如果我們需要做類型轉換,可以在比較前先做顯式的類型轉換,而不是靠 Javascript 本身復雜的強制轉換方法。
@justjavac 前輩所提的這個問題更加詳述地分析了 Javascript 中的比較。
參考《詳解一下 javascript 中的比較》
http://bonsaiden.github.io/JavaScript-Garden/#types.equality
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78105.html
摘要:因為是弱類型語言,所以它會在任何可能的情形下對變量進行強制類型轉換。內置類型的構造函數調用內置類型的構造函數時,是否使用關鍵字將表現得大不相同。傳遞字面值或非對象值也會造成強制類型轉換的現象。最好的方法就是顯示地將值轉換為,或三種類型之一。 因為 Javascript 是弱類型語言,所以它會在任何可能的情形下對變量進行強制類型轉換。 // These are true new Num...
摘要:的操作符可以用來比較兩個操作數的構造函數。這是因為它們的構造函數不可能會是同一個對象。總結綜上所述,我們知道操作符最合適的使用壞境是比較兩個相同上下文背景下的自定義對象的構造函數,正如上篇介紹的操作符,其他壞境下使用作用不大。 Javascript 的 instanceof 操作符可以用來比較兩個操作數的構造函數 constructor。但這個只有在比較自定義對象才有意義。當用來比較 ...
摘要:并沒有類繼承模型,而是使用原型對象進行原型式繼承。我們舉例說明原型鏈查找機制當訪問一個對象的屬性時,會從對象本身開始往上遍歷整個原型鏈,直到找到對應屬性為止。原始類型有以下五種型。此外,試圖查找一個不存在屬性時將會遍歷整個原型鏈。 Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進行原型式繼承。 盡管人們經常將此看做是 Javascript 的一個缺點,然...
摘要:為數值固定的表示法,用來表示整數和浮點數的。無論你寫何種進制,它的存儲還是以二進制來存儲的,所以這樣就弄成了浮點數的存儲精確度,浮點數只能精確到位小數。關系運算符關系運算符有和。賦值運算符賦值運算符有六個。 現在的爬蟲越來越難了,不再和之前的那樣,隨便抓個包就可以找到相關的 url ,然后 post 一下或者 get 一下數據就出來了。還有一個可能就是可能你以前用來學習的爬蟲網站太簡單...
因為最近有博友反饋我的博文是直接翻譯的參考鏈接內的內容,所以我在這里要說明一下,以免引起不必要的誤會。 首先,我很喜歡 segmentfault 的交流和學習的氛圍,所以我很愿意在這里跟各位 SFer 交流學習心得,相互學習,共同進步。 第二,我做技術方面的工作不久,所以學習經歷也不是很長,但是我發現寫博客,總結自己的學習心得是個很好的學習習慣,至少對于我個人而言,我于此收益頗豐,所以我決定堅持一...
閱讀 2404·2021-10-14 09:43
閱讀 2435·2021-09-09 09:34
閱讀 1601·2019-08-30 12:57
閱讀 1198·2019-08-29 14:16
閱讀 718·2019-08-26 12:13
閱讀 3201·2019-08-26 11:45
閱讀 2282·2019-08-23 16:18
閱讀 2652·2019-08-23 15:27