javascript網頁 - javascript用途



為什麼“undefined equals false”返回false? (6)

Undefined不能= false,因為它尚未定義,因此不知道它是否存在

用英語說Anonymous = Fred或Anonymous!= Fred。

可能是弗雷德,可能是比爾,但目前我們還沒有線索。

Null的類似規則。 首先讓你的頭部變得有點痛苦,但這是一個非常有價值的規則,如果沒有它,各種各樣的模糊可能會蔓延到你的設計中。

例如,如何區分尚未輸入(空)或空白的內容之間的區別。

當我將undefined和null與Boolean false進行比較時,該語句返回false:

undefined == false;
null == false;

它返回false。 為什麼?


Answer #1

來自無與倫比的MDN,由JavaScript的創建者公司贊助。

JavaScript提供三種不同的值比較操作:

  • 嚴格平等(或“三等於”或“身份”)使用===,
  • 鬆散的平等(“雙等於”)使用==,
  • 和Object.is(ECMAScript> 6中的新內容)。

選擇使用哪種操作取決於您要執行的比較類型。

簡而言之,double equals在比較兩件事時會執行類型轉換; 如果沒有類型轉換,三等於將進行相同的比較(如果類型不同,則總是返回false); 和Object.is的行為方式與triple equals相同,但是對NaN和-0以及+0進行特殊處理,以便最後兩個不相同,而Object.is(NaN,NaN)將為true 。 (通常將NaN與NaN進行比較 - 即,使用double equals或triple equals-評估為false,因為IEEE 754這樣說。)請注意,這些之間的區別都與它們對原語的處理有關; 沒有人比較參數在結構上是否在概念上相似。 對於具有相同結構但本身是不同對象的任何非原始對象x和y,所有上述形式將評估為false。

有關JavaScript中相等的整體情況的直觀概述: https://dorey.github.io/JavaScript-Equality-Table/https://dorey.github.io/JavaScript-Equality-Table/

事實是,當你理解它是如何工作的時候,JavaScript的這個看似“壞”的方面是一種力量源泉。


Answer #2

所以undefined真的意味著未定義。 不是假,不是真,不是0,不是空字符串。 因此,當您將undefined與任何內容進行比較時,結果始終為false,它等於該值。


Answer #3

未定義與false不同, false是布爾對象(其值為0因此確實定義了)。

一個例子:

var my_var;
var defined = (my_var === undefined)
alert(defined);  //prints true.  It is true that my_var is undefined

my_var = 22;
defined = (my_var === undefined)
alert(defined);  //prints false.  my_var is now defined

defined = (false === undefined)
alert(defined);  //prints false, false is defined

defined = (true === undefined)
alert(defined);  //prints false, true is defined

Answer #4

由於原始答案指向要刪除的規範,我想在此處提供鏈接和簡短的摘錄。

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

ECMA規範文檔列出了undefined == false返回false的原因。 雖然它沒有直接說明為什麼會這樣,但回答這個問題最重要的部分在於這句話:

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

如果我們查找null的定義,我們會發現如下:

NULL or nil means "no value" or "not applicable".

在Javascript中, undefined以相同的方式處理。 它沒有任何價值。 但是,false確實有價值。 它告訴我們事情並非如此。 而undefinednull不應該給我們任何價值。 同樣,它沒有什麼可以轉換為它的抽象相等比較,因此結果總是錯誤的。 這也是null == undefined返回true的原因(它們都沒有任何值)。 應該注意的是, null === undefined因為它們的類型不同而返回false。 (在控制台中使用typeof(null)typeof(undefined)來檢查它)

但我很好奇的是,將NaN與任何東西進行比較總是會返回錯誤。 即使將它與自身進行比較。 [ NaN == NaN返回false]

另外,另一個奇怪的信息:[ typeof NaN返回“數字”]

嚴格平等

如果可能,您應該避免使用==運算符來比較兩個值。 而是使用===來真正看出兩個值是否相等。 ==給出一種錯覺,即當兩個值可能不是通過使用強制時,它們確實完全相同。 例子:

5 == "5"是真的

5 === "5"是假的

"" == false是真的

"" === false是假的

0 == false為真

0 === false為false






javascript