2017-04-18 80 views
0

我們知道=====之間的區別是什麼 - 基本上,===可以阻止JavaScript引擎將參數中的一個轉換爲相同類型的兩個參數。但現在,在ES6,來到一個新的運營商 - Object.is這是一個有點混亂(或者===現在混亂..)Javascript ES6。 ===和Object.is之間的區別

從Mozila網站(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness),我們可以看到其中的差別:

的趨同比較:

x   y ==  ===  Object.is 
+0   -0 true true false 
NaN  NaN false false true 

所以,對我來說,看起來就像Object.is是更嚴格的比較參數,如果是這樣,問題提出 - unstrict怎麼===(所謂的「絕對平等」):)

回答

1

從你鏈接的文章:

當使用Object.is與三重平等

除了它把NaN的,一般,唯一的一次Object.is邁向零特殊的行爲是這樣的可能會感興趣的是追求某些元編程方案,尤其是關於屬性描述符,當您的工作需要反映Object.defineProperty的某些特徵時。如果你的用例不需要這個,建議避免使用Object.is並使用===。即使您的需求涉及將兩個NaN值之間的比較評估爲true,但通常情況下,使用NaN檢查(使用可從以前版本的ECMAScript獲得的isNaN方法)特殊情況比計算周圍計算如何影響您在比較中遇到的任何零點的符號。

+0

那篇文章太長看,我只是看圖片。謝謝:) –

+0

我個人覺得4種類型的平等的有點多的JS。特別是SameValue vs SameValueZero ...呃。 – gforce301

+0

啊,這是正是爲什麼我開始學習JS「在艱難的歷程」 - 先學什麼引擎蓋下... –

1

通過MDN

這也是不一樣的根據===運算符是相等的。 ===運算符(以及==運算符)也將數字值-0和+0視爲相等,並將Number.NaN視爲不等於NaN。

+0

啊,所以這是一種方法..嗯..認爲它是一個比較。但是,比較也是一種方法,對吧? Thx,我第一天用Javascript .. –

+1

@ J.D .:它*是*比較:在你給出的兩個參數中,爲了平等(通過一個平等的定義; JavaScript至少有四個)。 :-) –

+0

@ T.J。 Crowder,所以你也是說運營商沒有存儲在內存(Execution Context)中,就像函數一樣吧?是什麼讓我迷惑了MDN的這一行 - 「Object.is()方法確定兩個值是否是相同的值。」 - 他們寫**方法** ... –