摘要:今天在筆試題被公子給了,遂想起之前要寫的一篇文章,中蛋疼的比較運(yùn)算。當(dāng)和為引用同一對(duì)象時(shí)返回。若為且為,返回的結(jié)果。所以標(biāo)準(zhǔn)中認(rèn)為相等的值可能被檢測(cè)為不等。實(shí)際上這一算法認(rèn)為兩個(gè)字符串已經(jīng)是經(jīng)過規(guī)范化的形式。
今天在 JS筆試題 被 @公子 給AT了,遂想起之前要寫的一篇文章,javascript 中蛋疼的比較運(yùn)算。
翻譯自:http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
11.9.3 抽象相等比較算法比較運(yùn)算 x==y, 其中 x 和 y 是值,產(chǎn)生 true 或者 false。這樣的比較按如下方式進(jìn)行:
若 Type(x) 與 Type(y) 相同, 則
若 Type(x) 為 Undefined, 返回 true。
若 Type(x) 為 Null, 返回 true。
若 Type(x) 為 Number, 則
若 x 為 NaN, 返回 false。
若 y 為 NaN, 返回 false。
若 x 與 y 為相等數(shù)值, 返回 true。
若 x 為 +0 且 y 為 ?0, 返回 true。
若 x 為 ?0 且 y 為 +0, 返回 true。
返回 false。
若 Type(x) 為 String, 則當(dāng) x 和 y 為完全相同的字符序列(長度相等且相同字符在相同位置)時(shí)返回 true。 否則, 返回 false。
若 Type(x) 為 Boolean, 當(dāng) x 和 y 為同為 true 或者同為 false 時(shí)返回 true。 否則, 返回 false。
當(dāng) x 和 y 為引用同一對(duì)象時(shí)返回 true。否則,返回 false。
若 x 為 null 且 y 為 undefined, 返回 true。
若 x 為 undefined 且 y 為 null, 返回 true。
若 Type(x) 為 Number 且 Type(y) 為 String, 返回 comparison x == ToNumber(y) 的結(jié)果。
若 Type(x) 為 String 且 Type(y) 為 Number,
返回比較 ToNumber(x) == y 的結(jié)果。
若 Type(x) 為 Boolean, 返回比較 ToNumber(x) == y 的結(jié)果。
若 Type(y) 為 Boolean, 返回比較 x == ToNumber(y) 的結(jié)果。
若 Type(x) 為 String 或 Number,且 Type(y) 為 Object,返回比較 x == ToPrimitive(y) 的結(jié)果。
若 Type(x) 為 Object 且 Type(y) 為 String 或 Number, 返回比較 ToPrimitive(x) == y 的結(jié)果。
返回 false。
注:按以上相等之定義:
字符串比較可以按這種方式強(qiáng)制執(zhí)行: "" + a == "" + b。
數(shù)值比較可以按這種方式強(qiáng)制執(zhí)行: +a == +b。
布爾值比較可以按這種方式強(qiáng)制執(zhí)行: !a == !b。
注:等值比較操作保證以下不變:
A != B 等價(jià)于 !(A==B)。
A == B 等價(jià)于 B == A,除了 A 與 B 的執(zhí)行順序。
注:相等運(yùn)算符不總是傳遞的。 例如,兩個(gè)不同的 String 對(duì)象,都表示相同的字符串值;== 運(yùn)算符認(rèn)為每個(gè) String 對(duì)象都與字符串值相等,但是兩個(gè)字符串對(duì)象互不相等。例如:
new String("a") == "a" 和 "a" == new String("a") 皆為 true。
new String("a") == new String("a") 為 false。
字符串比較使用的方式是簡單地檢測(cè)字符編碼單元序列是否相同。不會(huì)做更復(fù)雜的、基于語義的字符或者字符串相等的定義以及 Unicode 規(guī)范中定義的 collating order。所以 Unicode 標(biāo)準(zhǔn)中認(rèn)為相等的 String 值可能被檢測(cè)為不等。實(shí)際上這一算法認(rèn)為兩個(gè)字符串已經(jīng)是經(jīng)過規(guī)范化的形式。
11.9.6 嚴(yán)格等于比較算法比較 x===y,x 和 y 為值,需要產(chǎn)出 true 或 false。比較過程如下:
如果 Type(x) 與 Type(y) 的結(jié)果不一致,返回 false,否則
如果 Type(x) 結(jié)果為 Undefined,返回 true
如果 Type(x) 結(jié)果為 Null,返回 true
如果 Type(x) 結(jié)果為 Number,則
如果 x 為 NaN,返回 false
如果 y 為 NaN,返回 false
如果 x 與 y 為同一個(gè)數(shù)字,返回 true
如果 x 為 +0,y 為 -0,返回 true
如果 x 為 -0,y 為 +0,返回 true
返回 false
如果 Type(x) 結(jié)果為 String,如果 x 與 y 為完全相同的字符序列(相同的長度和相同的字符對(duì)應(yīng)相同的位置),返回 true,否則,返回 false
如果 Type(x) 結(jié)果為 Boolean,如果 x 與 y 都為 true 或 false,則返回 true,否則,返回 false
如果 x 和 y 引用到同一個(gè) Object 對(duì)象,返回 true,否則,返回 false
注:此算法與 SameValue 算法在對(duì)待有符號(hào)的零和 NaN 上表現(xiàn)不同。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/87616.html
摘要:方法可以接受一個(gè)可選的參數(shù),比較回調(diào)函數(shù)。方法會(huì)修改原本數(shù)組輸出如上,在調(diào)用方法后,自身數(shù)組被修改。對(duì)于長數(shù)組會(huì)使用快速排序,而快速排序一般是不穩(wěn)定的。所以方法返回的數(shù)組永遠(yuǎn)是該方法認(rèn)為的升序數(shù)組。 前幾天在某公司面試的時(shí)候被問到關(guān)于這個(gè)方法的默認(rèn)值的問題(然而面試官跟我說的其實(shí)是錯(cuò)的,當(dāng)場(chǎng)我還不夠底氣去反駁)。突然發(fā)現(xiàn)對(duì)這個(gè)方法的了解還不夠,因此回來查了資料,看了v8引擎的實(shí)現(xiàn)和EC...
摘要:局部變量,當(dāng)定義該變量的函數(shù)調(diào)用結(jié)束時(shí),該變量就會(huì)被垃圾回收機(jī)制回收而銷毀。如果在函數(shù)中不使用匿名函數(shù)創(chuàng)建閉包,而是通過引用一個(gè)外部函數(shù),也不會(huì)出現(xiàn)循環(huán)引用的問題。 閉包是什么 在 JavaScript 中,閉包是一個(gè)讓人很難弄懂的概念。ECMAScript 中給閉包的定義是:閉包,指的是詞法表示包括不被計(jì)算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。 是不是看完這個(gè)定義感...
摘要:當(dāng)和為引用同一對(duì)象時(shí)返回。若為且為,返回比較的結(jié)果。等價(jià)于,除了與的執(zhí)行順序。所以標(biāo)準(zhǔn)中認(rèn)為相等的值可能被檢測(cè)為不等。實(shí)際上這一算法認(rèn)為兩個(gè)字符串已經(jīng)是經(jīng)過規(guī)范化的形式。 ** 11.9.3 抽象相等比較算法 **比較運(yùn)算 x==y, 其中 x 和 y 是值,產(chǎn)生 true 或者 false。這樣的比較按如下方式進(jìn)行: 若 Type(x) 與 Type(y) 相同, 則若 Type(x...
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸耍虼宋闹兄豢炊?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...
摘要:代碼示例等號(hào)檢查,類型轉(zhuǎn)換后返回全等檢查,由于時(shí)類型,時(shí)類型,類型不同,返回關(guān)系運(yùn)算符關(guān)系運(yùn)算符執(zhí)行的是比較運(yùn)算,通常用于判斷兩個(gè)變量哪個(gè)大哪個(gè)小關(guān)系運(yùn)算符都返回一個(gè)布爾值。邏輯或運(yùn)輸符用雙豎線表示。 1.運(yùn)算符 JavaScript中常見的運(yùn)算符包含:賦值運(yùn)算符、算數(shù)運(yùn)算符、等性運(yùn)算符、關(guān)系運(yùn)算符、條件運(yùn)算符、布爾運(yùn)算符、邏輯運(yùn)算符…… 1.賦值運(yùn)算符 = 賦值運(yùn)算符=,用于給某個(gè)變...
閱讀 1873·2021-11-15 11:39
閱讀 1081·2020-12-03 17:06
閱讀 737·2019-12-27 11:42
閱讀 3274·2019-08-30 13:59
閱讀 1464·2019-08-26 13:22
閱讀 3288·2019-08-26 12:15
閱讀 2475·2019-08-26 10:22
閱讀 1564·2019-08-23 18:40