国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

詳解一下 javascript 中的比較

Pluser / 2435人閱讀

摘要:今天在筆試題被公子給了,遂想起之前要寫的一篇文章,中蛋疼的比較運(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, 其中 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 為引用同一對(duì)象時(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 對(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===yxy 為值,需要產(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+0y-0,返回 true

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

返回 false

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

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

如果 xy 引用到同一個(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

相關(guān)文章

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

    摘要:方法可以接受一個(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...

    Snailclimb 評(píng)論0 收藏0
  • JavaScript 中 閉包 的詳解

    摘要:局部變量,當(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è)定義感...

    longshengwang 評(píng)論0 收藏0
  • 詳解一下 javascript 中==與===的比較

    摘要:當(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...

    wwq0327 評(píng)論0 收藏0
  • JavaScript深入淺出

    摘要:理解的函數(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 的值到底...

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

    摘要:代碼示例等號(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è)變...

    Sourcelink 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<