2011-11-10 128 views
3

在JavaScript規格:http://www.ecma-international.org/publications/standards/Ecma-262.htmJavascript:解釋如果Type(x)未定義,則返回true。如果Type(x)是空,則返回true

11.9.6全等比較算法

比較X === y,其中x和y是數值,產生true或 false。這樣的比較如下進行:

  1. 如果Type(x)與Type(y)不同,則返回false。
  2. 如果Type(x)是Undefined,則返回true。
  3. 如果Type(x)爲Null,則返回true。
  4. 如果類型(x)是數字,則
    1. 如果x是NaN,則返回false。
    2. 如果y是NaN,則返回false。
    3. 如果x與y的數值相同,則返回true。
    4. 如果x是+0且y是-0,則返回true。
    5. 如果x是-0且y是+0,則返回true。
    6. 返回false。
  5. 如果Type(x)是字符串,那麼,如果x和y是準確相同的字符序列(相同的長度和相同的字符在 相應位置)返回true;否則,返回false。
  6. 如果Type(x)是布爾型,則返回true,如果x和y都爲真或兩者都爲假;否則,返回false。
  7. 如果x和y引用同一個對象,則返回true。否則,返回false。注:該算法從SameValue算法在處理符號零的(9.12) 和NaN

不同是什麼加粗的部分是什麼意思?你如何寫出一些JavaScript來確認它? 我試過alert(typeof(undefined) === 'x');,但它給了我false

+0

爲了給我們更多的上下文而不必下載外部PDF文件,你可以填寫這些錯誤嗎? –

+0

參見:http://stackoverflow.com/questions/6031372/undefined-and-null –

回答

4

之前,它說:

其中xy是價值

因此,首先給xy值。

然後忘記「等等」,1是重要的。 xy必須是通過第1步的相同類型。

第2步是「如果Type(x)未定義,則返回true」。

只有一個值給出未定義類型undefined。因此,只有這樣,才能測試步驟2(短分配undefined到變量):

alert(undefined === undefined) 

...會給真實的。

第3步的工作方式完全相同。唯一的空值是null

alert(null === null) 

手動執行的算法應該像這樣開頭:

function equalsequalsequals(x, y) 
if (typeof x != typeof y) { 
    return false; 
} else if (typeof x == "undefined") { 
    return true; 
} // … 

typeof運算符不能告訴我們,如果事情是空或不是,所以你不能完全實現該算法,而不使用===。因爲我們有===,但是,我們不需要。

1

Type()是一種內部方法,在JavaScript代碼中不可用。它是而不是typeof運營商相同。

xy指的是===的左右手操作數。他們不是字符串'x''y'

http://es5.github.com/#x11.9.6

2

我的理解是閱讀的規範作爲一個正式的證據之一,其依賴於第一條規則的號碼2和3:

  1. 如果Type(x)是來自不同鍵入(y),返回false。

由於你是在步驟2中,並沒有返回false,X的類型必須是相同的爲Y的,因此它被檢查條件爲:

(null) === (null) 

它返回true。這同樣適用於Undefined

相關問題