摘要:鏈接描述類型不同類型相同都為有三種同為同為處理都為時雖都為但不同或或有三種不考慮其他情況剩余暫時未實現(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) { //類型不同 return false; } else if (typeof a === "undefined") { //類型相同都為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時 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; } }
暫時未實現(xiàn)第4條的b,c..以及{}相等的解析未做。。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/81308.html
摘要:對象是中最常的內(nèi)置對象之一。為了節(jié)省內(nèi)存,使用一個共享的構(gòu)造器使用更安全的引用如果不是或,拋出一個異常。使創(chuàng)建的一個新的對象為,就和通過表達式創(chuàng)建一個新對象一樣,是標(biāo)準(zhǔn)內(nèi)置的構(gòu)造器名設(shè)置的內(nèi)部屬性為。方法返回一個該對象的字符串表示。 Object 對象是Javascript中最常的內(nèi)置對象之一。除了null 和 undefined,其他的所有的都可以轉(zhuǎn)換為對象。可以把對象看成含有鍵值一...
摘要:在中的關(guān)系比較運算,指的是像這種大小值的關(guān)系比較。而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等比較與嚴格相等比較兩大種類。 在JS中的關(guān)系比較(Relational Comparison)運算,指的是像x < y這種大小值的關(guān)系比較。 而相等比較,可區(qū)分為標(biāo)準(zhǔn)相等(standard equality)比較x == y與嚴格相等(strict equality)比較x === y兩大種類。嚴格相等比較會...
摘要:還規(guī)定了無窮及其它的相應(yīng)規(guī)范,有興趣可自行查找相關(guān)資料。其它相同數(shù)值相等。類型中,引用同一對象,相等。不同點對的判斷上各有不同。以為代表的相等和相等以為代表的不相等和相等以為代表的相等和不相等相同類型采用嚴格比較。 相等不相等? 先來隨便舉幾個?吧~ 0 == true //? [1] == [1] //? [1] == 1 ...
摘要:除非在本規(guī)范中其它指定的文法產(chǎn)生式可選部分隱式地包含一個叫做的接收一個值為包含相關(guān)產(chǎn)生式的文法的終結(jié)符或者非終結(jié)符的參數(shù)靜態(tài)語義規(guī)則的定義。 5.2 算法約定(Algorithm Conventions) ??規(guī)范常常使用一個帶編號的列表來顯示算法中的步驟。這個小算法被用作準(zhǔn)確地表達ECMAScript語言構(gòu)造需要的語義。這些算法并不是打算暗示任何具體實現(xiàn)的使用。事實上,這里也許有更高...
摘要:上面的理解是錯的,和返回就可以推翻。解釋不清楚和是相等的。和的規(guī)則類似,唯一少了轉(zhuǎn)換的一步。三高級階段參考規(guī)范真正理解真的如高設(shè)所說的那樣嗎其實不然。來分析一個經(jīng)典的例子,看完徹底理解的強制轉(zhuǎn)換。 showImg(https://segmentfault.com/img/remote/1460000011658462?w=512&h=321); 用中文怎么叫合適?相等?全等?其實并不合...
閱讀 2901·2021-10-27 14:19
閱讀 537·2021-10-18 13:29
閱讀 1128·2021-07-29 13:56
閱讀 3547·2019-08-30 13:19
閱讀 1927·2019-08-29 12:50
閱讀 1036·2019-08-23 18:16
閱讀 3522·2019-08-22 15:37
閱讀 1898·2019-08-22 15:37