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