摘要:鏈接描述類(lèi)型不同類(lèi)型相同都為有三種同為同為處理都為時(shí)雖都為但不同或或有三種不考慮其他情況剩余暫時(shí)未實(shí)現(xiàn)第條的以及相等的解析未做。。
9.12 The SameValue Algorithm鏈接描述
9.12 The SameValue Algorithm
The internal comparison abstract operation SameValue(x, y), where x and y are ECMAScript language values, produces true or false. Such a comparison is performed as follows:
1.If Type(x) is different from Type(y), return false.
2.If Type(x) is Undefined, return true.
3.If Type(x) is Null, return true.
4.If Type(x) is Number, then.
a.If x is NaN and y is NaN, return true. b.If x is +0 and y is -0, return false. c.If x is -0 and y is +0, return false. d.If x is the same Number value as y, return true. e.Return false.
5.If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions); otherwise, return false.
6.If Type(x) is Boolean, return true if x and y are both true or both false; otherwise, return false.
7.Return true if x and y refer to the same object. Otherwise, return false.
function SameValue (a,b){ // Number.isNaN=Number.isNaN||function (a){return typeof a==="number"&&isNaN(a);}; if (typeof a !== typeof b) { //類(lèi)型不同 return false; } else if (typeof a === "undefined") { //類(lèi)型相同都為undfined return true; } else if (typeof a === "object"){ //object有三種Array,{},null if (a === null && b === null) { //同為null return true; } else if (Array.isArray(a) && Array.isArray(b)){ //同為array var alength = a.length, blength = b.length; if (alength === blength){ for (var i = 0; i < alength; i++) { if (!SameValue(a[i], b[i])) { return false; } } return true; } else { return false; } }else if (a !== null && !Array.isArray(a) && b !==null && !Array.isArray(b)){ //處理都為object時(shí) return true; }else{ //雖都為object,但不同null或array或{} return false; } } else if (typeof a === "number") { //number有三種NaN,0,+-infinity不考慮 if (isNaN(a) && isNaN(b)){ return true; }else if (a === b){ return true; }else{ return false; } }else if (a.toString() === b.toString()){ //其他情況剩余function return true; }else{ return false; } }
暫時(shí)未實(shí)現(xiàn)第4條的b,c..以及{}相等的解析未做。。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://hztianpu.com/yun/81308.html
摘要:對(duì)象是中最常的內(nèi)置對(duì)象之一。為了節(jié)省內(nèi)存,使用一個(gè)共享的構(gòu)造器使用更安全的引用如果不是或,拋出一個(gè)異常。使創(chuàng)建的一個(gè)新的對(duì)象為,就和通過(guò)表達(dá)式創(chuàng)建一個(gè)新對(duì)象一樣,是標(biāo)準(zhǔn)內(nèi)置的構(gòu)造器名設(shè)置的內(nèi)部屬性為。方法返回一個(gè)該對(duì)象的字符串表示。 Object 對(duì)象是Javascript中最常的內(nèi)置對(duì)象之一。除了null 和 undefined,其他的所有的都可以轉(zhuǎn)換為對(duì)象。可以把對(duì)象看成含有鍵值一...
摘要:在中的關(guān)系比較運(yùn)算,指的是像這種大小值的關(guān)系比較。而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等比較與嚴(yán)格相等比較兩大種類(lèi)。 在JS中的關(guān)系比較(Relational Comparison)運(yùn)算,指的是像x < y這種大小值的關(guān)系比較。 而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等(standard equality)比較x == y與嚴(yán)格相等(strict equality)比較x === y兩大種類(lèi)。嚴(yán)格相等比較會(huì)...
摘要:還規(guī)定了無(wú)窮及其它的相應(yīng)規(guī)范,有興趣可自行查找相關(guān)資料。其它相同數(shù)值相等。類(lèi)型中,引用同一對(duì)象,相等。不同點(diǎn)對(duì)的判斷上各有不同。以為代表的相等和相等以為代表的不相等和相等以為代表的相等和不相等相同類(lèi)型采用嚴(yán)格比較。 相等不相等? 先來(lái)隨便舉幾個(gè)?吧~ 0 == true //? [1] == [1] //? [1] == 1 ...
摘要:除非在本規(guī)范中其它指定的文法產(chǎn)生式可選部分隱式地包含一個(gè)叫做的接收一個(gè)值為包含相關(guān)產(chǎn)生式的文法的終結(jié)符或者非終結(jié)符的參數(shù)靜態(tài)語(yǔ)義規(guī)則的定義。 5.2 算法約定(Algorithm Conventions) ??規(guī)范常常使用一個(gè)帶編號(hào)的列表來(lái)顯示算法中的步驟。這個(gè)小算法被用作準(zhǔn)確地表達(dá)ECMAScript語(yǔ)言構(gòu)造需要的語(yǔ)義。這些算法并不是打算暗示任何具體實(shí)現(xiàn)的使用。事實(shí)上,這里也許有更高...
摘要:上面的理解是錯(cuò)的,和返回就可以推翻。解釋不清楚和是相等的。和的規(guī)則類(lèi)似,唯一少了轉(zhuǎn)換的一步。三高級(jí)階段參考規(guī)范真正理解真的如高設(shè)所說(shuō)的那樣嗎其實(shí)不然。來(lái)分析一個(gè)經(jīng)典的例子,看完徹底理解的強(qiáng)制轉(zhuǎn)換。 showImg(https://segmentfault.com/img/remote/1460000011658462?w=512&h=321); 用中文怎么叫合適?相等?全等?其實(shí)并不合...
閱讀 3015·2021-10-27 14:19
閱讀 624·2021-10-18 13:29
閱讀 1229·2021-07-29 13:56
閱讀 3632·2019-08-30 13:19
閱讀 2033·2019-08-29 12:50
閱讀 1223·2019-08-23 18:16
閱讀 3600·2019-08-22 15:37
閱讀 1968·2019-08-22 15:37