成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

詳解一下 javascript 中的比較

Pluser / 2436人閱讀

摘要:今天在筆試題被公子給了,遂想起之前要寫的一篇文章,中蛋疼的比較運(yùn)算。當(dāng)和為引用同一對象時(shí)返回。若為且為,返回的結(jié)果。所以標(biāo)準(zhǔn)中認(rèn)為相等的值可能被檢測為不等。實(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, 其中 xy 是值,產(chǎn)生 true 或者 false。這樣的比較按如下方式進(jìn)行:

Type(x)Type(y) 相同, 則

Type(x)Undefined, 返回 true

Type(x)Null, 返回 true。

Type(x)Number, 則

xNaN, 返回 false。

yNaN, 返回 false

xy 為相等數(shù)值, 返回 true。

x+0y?0, 返回 true。

x?0y+0, 返回 true。

返回 false。

Type(x)String, 則當(dāng) xy 為完全相同的字符序列(長度相等且相同字符在相同位置)時(shí)返回 true。 否則, 返回 false

Type(x)Boolean, 當(dāng) xy 為同為 true 或者同為 false 時(shí)返回 true。 否則, 返回 false

當(dāng) xy 為引用同一對象時(shí)返回 true。否則,返回 false

xnullyundefined, 返回 true

xundefinedynull, 返回 true。

Type(x)NumberType(y)String, 返回 comparison x == ToNumber(y) 的結(jié)果。

Type(x)StringType(y)Number

返回比較 ToNumber(x) == y 的結(jié)果。

Type(x)Boolean, 返回比較 ToNumber(x) == y 的結(jié)果。

Type(y)Boolean, 返回比較 x == ToNumber(y) 的結(jié)果。

Type(x)StringNumber,且 Type(y)Object,返回比較 x == ToPrimitive(y) 的結(jié)果。

Type(x)ObjectType(y)StringNumber, 返回比較 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 對象,都表示相同的字符串值;== 運(yùn)算符認(rèn)為每個(gè) String 對象都與字符串值相等,但是兩個(gè)字符串對象互不相等。例如:

new String("a") == "a""a" == new String("a") 皆為 true

new String("a") == new String("a")false。

字符串比較使用的方式是簡單地檢測字符編碼單元序列是否相同。不會做更復(fù)雜的、基于語義的字符或者字符串相等的定義以及 Unicode 規(guī)范中定義的 collating order。所以 Unicode 標(biāo)準(zhǔn)中認(rèn)為相等的 String 值可能被檢測為不等。實(shí)際上這一算法認(rèn)為兩個(gè)字符串已經(jīng)是經(jīng)過規(guī)范化的形式。

11.9.6 嚴(yán)格等于比較算法

比較 x===y,xy 為值,需要產(chǎn)出 truefalse。比較過程如下:

如果 Type(x)Type(y) 的結(jié)果不一致,返回 false,否則

如果 Type(x) 結(jié)果為 Undefined,返回 true

如果 Type(x) 結(jié)果為 Null,返回 true

如果 Type(x) 結(jié)果為 Number,則

如果 xNaN,返回 false

如果 yNaN,返回 false

如果 xy 為同一個(gè)數(shù)字,返回 true

如果 x+0,y-0,返回 true

如果 x-0,y+0,返回 true

返回 false

如果 Type(x) 結(jié)果為 String,如果 xy 為完全相同的字符序列(相同的長度和相同的字符對應(yīng)相同的位置),返回 true,否則,返回 false

如果 Type(x) 結(jié)果為 Boolean,如果 xy 都為 truefalse,則返回 true,否則,返回 false

如果 xy 引用到同一個(gè) Object 對象,返回 true,否則,返回 false

注:此算法與 SameValue 算法在對待有符號的零和 NaN 上表現(xiàn)不同。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87616.html

相關(guān)文章

  • JavaScript中的Array.prototype.sort方法詳解

    摘要:方法可以接受一個(gè)可選的參數(shù),比較回調(diào)函數(shù)。方法會修改原本數(shù)組輸出如上,在調(diào)用方法后,自身數(shù)組被修改。對于長數(shù)組會使用快速排序,而快速排序一般是不穩(wěn)定的。所以方法返回的數(shù)組永遠(yuǎn)是該方法認(rèn)為的升序數(shù)組。 前幾天在某公司面試的時(shí)候被問到關(guān)于這個(gè)方法的默認(rèn)值的問題(然而面試官跟我說的其實(shí)是錯(cuò)的,當(dāng)場我還不夠底氣去反駁)。突然發(fā)現(xiàn)對這個(gè)方法的了解還不夠,因此回來查了資料,看了v8引擎的實(shí)現(xiàn)和EC...

    Snailclimb 評論0 收藏0
  • JavaScript 中 閉包 的詳解

    摘要:局部變量,當(dāng)定義該變量的函數(shù)調(diào)用結(jié)束時(shí),該變量就會被垃圾回收機(jī)制回收而銷毀。如果在函數(shù)中不使用匿名函數(shù)創(chuàng)建閉包,而是通過引用一個(gè)外部函數(shù),也不會出現(xiàn)循環(huán)引用的問題。 閉包是什么 在 JavaScript 中,閉包是一個(gè)讓人很難弄懂的概念。ECMAScript 中給閉包的定義是:閉包,指的是詞法表示包括不被計(jì)算的變量的函數(shù),也就是說,函數(shù)可以使用函數(shù)之外定義的變量。 是不是看完這個(gè)定義感...

    longshengwang 評論0 收藏0
  • 詳解一下 javascript 中==與===的比較

    摘要:當(dāng)和為引用同一對象時(shí)返回。若為且為,返回比較的結(jié)果。等價(jià)于,除了與的執(zhí)行順序。所以標(biāo)準(zhǔn)中認(rèn)為相等的值可能被檢測為不等。實(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...

    wwq0327 評論0 收藏0
  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對方法,包括,,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸?,因此文中只看懂?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...

    blair 評論0 收藏0
  • javascript變量運(yùn)算符詳解

    摘要:代碼示例等號檢查,類型轉(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è)變...

    Sourcelink 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<