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

資訊專欄INFORMATION COLUMN

詳解一下 javascript 中的比較

Pluser / 2431人閱讀

摘要:今天在筆試題被公子給了,遂想起之前要寫的一篇文章,中蛋疼的比較運算。當和為引用同一對象時返回。若為且為,返回的結果。所以標準中認為相等的值可能被檢測為不等。實際上這一算法認為兩個字符串已經是經過規范化的形式。

今天在 JS筆試題 被 @公子 給AT了,遂想起之前要寫的一篇文章,javascript 中蛋疼的比較運算。

翻譯自:http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

11.9.3 抽象相等比較算法

比較運算 x==y, 其中 xy 是值,產生 true 或者 false。這樣的比較按如下方式進行:

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

Type(x)Undefined, 返回 true。

Type(x)Null, 返回 true

Type(x)Number, 則

xNaN, 返回 false。

yNaN, 返回 false

xy 為相等數值, 返回 true。

x+0y?0, 返回 true。

x?0y+0, 返回 true

返回 false。

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

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

xy 為引用同一對象時返回 true。否則,返回 false。

xnullyundefined, 返回 true

xundefinedynull, 返回 true。

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

Type(x)StringType(y)Number,

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

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

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

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

Type(x)ObjectType(y)StringNumber, 返回比較 ToPrimitive(x) == y 的結果。

返回 false。

注:按以上相等之定義:

字符串比較可以按這種方式強制執行: "" + a == "" + b

數值比較可以按這種方式強制執行: +a == +b。

布爾值比較可以按這種方式強制執行: !a == !b。

注:等值比較操作保證以下不變:

A != B 等價于 !(A==B)

A == B 等價于 B == A,除了 A 與 B 的執行順序。

注:相等運算符不總是傳遞的。 例如,兩個不同的 String 對象,都表示相同的字符串值;== 運算符認為每個 String 對象都與字符串值相等,但是兩個字符串對象互不相等。例如:

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

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

字符串比較使用的方式是簡單地檢測字符編碼單元序列是否相同。不會做更復雜的、基于語義的字符或者字符串相等的定義以及 Unicode 規范中定義的 collating order。所以 Unicode 標準中認為相等的 String 值可能被檢測為不等。實際上這一算法認為兩個字符串已經是經過規范化的形式。

11.9.6 嚴格等于比較算法

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

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

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

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

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

如果 xNaN,返回 false

如果 yNaN,返回 false

如果 xy 為同一個數字,返回 true

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

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

返回 false

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/87616.html

相關文章

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

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

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

    摘要:局部變量,當定義該變量的函數調用結束時,該變量就會被垃圾回收機制回收而銷毀。如果在函數中不使用匿名函數創建閉包,而是通過引用一個外部函數,也不會出現循環引用的問題。 閉包是什么 在 JavaScript 中,閉包是一個讓人很難弄懂的概念。ECMAScript 中給閉包的定義是:閉包,指的是詞法表示包括不被計算的變量的函數,也就是說,函數可以使用函數之外定義的變量。 是不是看完這個定義感...

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

    摘要:當和為引用同一對象時返回。若為且為,返回比較的結果。等價于,除了與的執行順序。所以標準中認為相等的值可能被檢測為不等。實際上這一算法認為兩個字符串已經是經過規范化的形式。 ** 11.9.3 抽象相等比較算法 **比較運算 x==y, 其中 x 和 y 是值,產生 true 或者 false。這樣的比較按如下方式進行: 若 Type(x) 與 Type(y) 相同, 則若 Type(x...

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

    摘要:理解的函數基礎要搞好深入淺出原型使用原型模型,雖然這經常被當作缺點提及,但是只要善于運用,其實基于原型的繼承模型比傳統的類繼承還要強大。中文指南基本操作指南二繼續熟悉的幾對方法,包括,,。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 怎樣使用 this 因為本人屬于偽前端,因此文中只看懂了 8 成左右,希望能夠給大家帶來幫助....(據說是阿里的前端妹子寫的) this 的值到底...

    blair 評論0 收藏0
  • javascript變量運算符詳解

    摘要:代碼示例等號檢查,類型轉換后返回全等檢查,由于時類型,時類型,類型不同,返回關系運算符關系運算符執行的是比較運算,通常用于判斷兩個變量哪個大哪個小關系運算符都返回一個布爾值。邏輯或運輸符用雙豎線表示。 1.運算符 JavaScript中常見的運算符包含:賦值運算符、算數運算符、等性運算符、關系運算符、條件運算符、布爾運算符、邏輯運算符…… 1.賦值運算符 = 賦值運算符=,用于給某個變...

    Sourcelink 評論0 收藏0

發表評論

0條評論

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