2016-07-28 192 views
3

我有一個代碼是低於我也不清楚爲什麼null == undefined的值爲true?

var a = null; 
if(a==undefined) 
alert("true"); 
else 
alert("false"); 

當我運行上面的代碼提醒真實的。

任何人都可以解釋什麼是背後的原因或概念?

+2

嘗試'==='而不是'==';-) –

+0

null的數據類型是「對象」,而對於未定義的「undefined」,我認爲沒有類似的null和undefined,爲什麼它的打印是真的? –

+0

在[SO Documentation](http://stackoverflow.com/documentation/javascript/208/comparison-operations/796)中也定義了抽象相等運算符的細節(或者更確切地說是小規模的一個副本) /抽象平等#噸= 201607280802422140727)。 –

回答

7

因爲==寬鬆平等運營商這是真的,並nullundefined鬆散相等(null == undefined是真的)。如果您使用嚴格的相等運算符===,則它們不相等(null === undefined爲false)。

基本上,鬆散的相等運算符會強制它的操作數,如果它們是不同類型的(參見spec中的Abtract Equality Comparison)。例如,0 == ""是正確的,因爲如果您將""強制轉換爲數字,則它的格式爲0。嚴格相等運算符認爲不同類型的操作數不相等(請參閱Strict Equality Comparison);它不強制。

+0

這應該是被接受的答案。規則也在[mozila developers network]中說明(https://developer.mozilla.org/en/docs/Web/JavaScript/Equality_comparisons_and_sameness) – Kanagu

0

specifications對於==運算符的定義使得null == undefined返回true

-1

undefined意味着一個變量還沒有被定義或給定一個值。 null是一個特殊的對象javascript之內。

使用等於==的值進行比較將始終爲您提供true,因爲它們在值(0, nothing, nada, zip)中基本相同。

使用嚴格平等===不過,將返回false因爲空是一個objectundefined只是一個空白variable

-1

如果一個變量沒有指向任何東西,它就是null。這在概念上類似於尚未初始化的未定義變量。

JavaScript解釋爲使鬆散相等(==)對待null和未定義的方式相同。嚴格平等(===)更挑剔;如果你有不同的數據類型,比如null和undefined,它們將不相等。

What is the difference between null and undefined in JavaScript?對undefined和null和 Which equals operator (== vs ===) should be used in JavaScript comparisons?

0

這種行爲從JavaScript是弱類型語言莖之間的差異。在平等的情況下,這意味着可以比較不同數據類型的值。

nullundefined都被認爲是「虛假」,因此他們被認爲是平等的。

邏輯上,如果null == falseundefined == false,則null == undefined

+0

*「null和undefined都被認爲是」falsy「,因此它們鬆散被認爲是平等的。「*不,很多謬誤值並不是鬆散相等的。 '0 == null'爲'false','false == undefined'爲'false','NaN =='「'爲'false',... –

相關問題