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

資訊專欄INFORMATION COLUMN

關于js中的 “==” 與 “===”

hizengzeng / 1932人閱讀

摘要:在中,和運算符用來比較兩個值是否相等,但是他們對于相等的定義是不同的。如果不是正常值比如拋出一個錯誤,中斷執行。如果不是正常值,中斷執行。如果與相同,執行嚴格相等運算。如果為,或,為,則返回比較的結果。

在js中,"==" 和 "==="運算符用來比較兩個值是否相等,但是他們對于相等的定義是不同的。兩個運算符都可以用來比較任意類型的操作數,如果兩個操作數相等,返回true,否則,返回false。"===" 嚴格相等運算符,用來比較兩個操作數是否嚴格相等。"==" 相等運算符,用來比較兩個操作數是否相等。
詳細信息可參照ECMA標準(戳這里)。

Abstract Equality Comparison ==

== 相等操作符,在比較前會把比較的兩個數轉換成相同的數據類型之后,然后對兩個數進行比較。轉換后,比較方式與 === 相同。

ECMA中比較規則如下:

The comparison x == y, where x and y are values, produces true or false.

1. ReturnIfAbrupt(x).
2. ReturnIfAbrupt(y).
3. If Type(x) is the same as Type(y), then
    Return the result of performing Strict Equality Comparison x === y.
4. If x is null and y is undefined, return true.
5. If x is undefined and y is null, return true.
6. If Type(x) is Number and Type(y) is String,
    return the result of the comparison x == ToNumber(y).
7. If Type(x) is String and Type(y) is Number,
    return the result of the comparison ToNumber(x) == y.
8. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
9. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
10. If Type(x) is either String, Number, or Symbol and Type(y) is Object, then
    return the result of the comparison x == ToPrimitive(y).
11. If Type(x) is Object and Type(y) is either String, Number, or Symbol, then
    return the result of the comparison ToPrimitive(x) == y.
12. Return false.

翻譯如下:

比較 x == y,當x 和 y是正常值時,返回 true 或者 false。

如果x不是正常值(比如拋出一個錯誤),中斷執行。

如果y不是正常值,中斷執行。

如果Type(x)與Type(y)相同,執行嚴格相等運算x === y。

如果x為null且y為undefined,則返回true。

如果x為undefined,y為null,則返回true。

如果Type(x)是Number,Type(y)是String,返回比較結果 x == ToNumber(y)。

如果Type(x)是String,Type(y)是Number,返回比較結果ToNumber(x)== y。

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

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

如果Type(x)為String,Number或Symbol,Type(y)為Object,則返回比較的結果x == ToPrimitive(y)。

如果Type(x)是Object,Type(y)是String,Number或Symbol,那么
返回比較結果ToPrimitive(x)== y。

返回假。

簡化一下 ,可以理解為:

如果兩個操作數類型相同,則進行 x===y。

如果一個為null,另一個為undefined,則返回true。

如果兩個操作數均為基本數據類型,則把操作數轉換為Number類型進行比較。

如果其中有一個操作數為Object,則調用對象的 toString 或者 valueOf 方法,將對象轉化為原始值進行比較。

如果不滿足上述任何情況,則返回 false。

Strict Equality Comparison "==="

"===" 嚴格相等操作符,用來比較兩個操作數是否嚴格相等。

ECMA中比較規則如下:

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, return false.
    b. If y is NaN, return false.
    c. If x is the same Number value as y, return true.
    d. If x is +0 and y is ?0, return true.
    e. If x is ?0 and y is +0, return true.
    f. Return false.
5. If Type(x) is String, then
    a. If x and y are exactly the same sequence of code units (same length and same code           units at corresponding indices), return true.
    b. Else, return false.
6. If Type(x) is Boolean, then
    a. If x and y are both true or both false, return true.
    b. Else, return false.
7. If x and y are the same Symbol value, return true.
8. If x and y are the same Object value, return true.
9. Return false.

翻譯:

如果Type(x)與Type(y)不同,則返回false。

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

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

如果Type(x)是Number,那么

如果x是NaN,則返回false。

如果y是NaN,則返回false。

如果x與y的Number值相同,則返回true。

如果x為+0且y為-0,則返回true。

如果x是-0而y是+0,則返回true。

返回假。

如果Type(x)是String,那么

如果x和y是完全相同的代碼單元序列(相同長度和相應索引處的相同代碼單位),則返回true。

否則返回假。

如果Type(x)為Boolean,則
a.如果x和y都為true或都為false,則返回true。
b.否則返回假。

如果x和y是相同的符號值,則返回true。

如果x和y是相同的Object值,則返回true。

返回假。

簡化一下,可以理解為:

如果兩個操作數類型不相同,返回false。

undefined === undefined => true

null === null => true

如果操作數的數據類型都為Number,當兩個數的值相同時,返回true, 否則返回 false。

注: -0 === +0   => true     +0 === -0 => true
    NaN 與任何值都不相等,包括他自己。 所以要判斷一個數值是否為NaN, 可采用 x !== x ,只有NaN 返回true

如果操作數的數據類型都為String或Boolean時,只有x和y完全相同,返回ture。

如果操作數的數據類型都為Object,只有兩個操作數指向的地址完全相同時,返回true,否則返回false。

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

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

相關文章

  • JavaScript深入淺出

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

    blair 評論0 收藏0
  • 正在失業中的《課多周刊》(第3期)

    摘要:正在失業中的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關于的不好之處。淺談超時一運維的排查方式。 正在失業中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...

    robin 評論0 收藏0
  • 正在失業中的《課多周刊》(第3期)

    摘要:正在失業中的課多周刊第期我們的微信公眾號,更多精彩內容皆在微信公眾號,歡迎關注。若有幫助,請把課多周刊推薦給你的朋友,你的支持是我們最大的動力。是一種禍害譯本文淺談了在中關于的不好之處。淺談超時一運維的排查方式。 正在失業中的《課多周刊》(第3期) 我們的微信公眾號:fed-talk,更多精彩內容皆在微信公眾號,歡迎關注。 若有幫助,請把 課多周刊 推薦給你的朋友,你的支持是我們最大的...

    Joyven 評論0 收藏0
  • 關于 Glob (gulp)的學習

    摘要:參考資料下文是關于的方法的第一個參數的學習。因此,會展開為和。獲取目錄下所有文件名長度為字符的文件。匹配該路徑段中在指定范圍內的一個字符。匹配完全且精確地匹配,且不可組合不符合任何模型之一的字符。可通過在設置,讓將視為普通字符。 參考資料:https://github.com/isaacs/nod... 下文是關于 Gulp 的 gulp.src(globs[, options]) 方...

    ThreeWords 評論0 收藏0
  • Node.js 指南(關于Node.js

    摘要:如果不熟悉這種語言,有一篇關于阻塞與非阻塞的完整文章。在設計上與的或的等系統類似,并受其影響,進一步采用事件模型。它將事件循環呈現為運行時構造而不是庫,在其他系統中,始終存在阻塞調用以啟動事件循環。上一篇指南目錄下一篇入門指南 關于Node.js 作為異步事件驅動的JavaScript運行時,Node旨在構建可伸縮的網絡應用程序,在下面的hello world示例中,可以同時處理許多連...

    Java_oldboy 評論0 收藏0

發表評論

0條評論

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