2014-02-13 86 views
5

空對象未定義,像這樣var empty_obj = {}。 未定義將是錯誤的。但我注意到, empty_obj || 3將返回empty_obj而不是3. 這是爲什麼?Javascript:是一個空虛的對象是一個虛假的對象嗎?

+0

爲什麼它應該是假的?它完全合理的讓所有的對象都是真的,事實上許多其他語言都會這樣做。 – hugomg

+0

嘗試'if(Object.keys(obj).length)'檢查是否爲空 – elclanrs

回答

13

空對象是而不是未定義。

console.log({} === undefined); // false 
console.log(typeof {}); // object 

它是一個truthy值:

if ({}) console.log('truthy'); // truthy 

它甚至有一些性質:

console.log(typeof {}.hasOwnProperty); // function 

唯一在JS falsy值0falsenullundefined,空字符串,和NaN


您可能會對var =語句的返回值感到困惑。這些將始終顯示如Chrome瀏覽器控制檯undefined

> var obj = {} 
undefined 
> var x = 100 
undefined 
> var y = "potato" 
undefined 

只是因爲不確定,並不意味着價值var =語句返回是不確定的。雖然,沒有var,作業做返回值被分配:

> obj = {} 
{} 
> x = 100 
100 
> y = "potato" 
"potato" 
+1

爲什麼'{} == true'返回false? –

+2

@KevinBowersox「truthy」!=='== true'。 '{} == false'也返回false。 '「一些字符串」== true「也返回false。 – Doorknob

+0

@ Doorknob明白!謝謝。 –

0

空對象沒有未定義的,只有類型undefined 的對象未定義:

[[email protected]~]node 
> undefined == {} 
false 
> typeof {} 
'object' 
> typeof undefined 
'undefined' 

它當不使用嚴格模式時可以重新定義undefined。使用typeofvoid 0檢查更安全。

+0

謝謝@TimWolla,我看到你的觀點。當我使用chrome控制檯測試它時,chrome在我輸入var obj = {} – Bargitta

+1

@Bargitta後回覆未定義當然,在您鍵入'var x = 100'後,它也會回覆undefined。 'var ='賦值總是返回undefined。 – Doorknob

+0

謝謝@門把手 – Bargitta

0

您已將empty_obj定義爲碰巧沒有任何已定義屬性但已定義的對象。出於這個原因,empty_obj會導致分配中的真實和返回。

var myobj = {}; //defined 
var myobj2;  //undefined 

if(myobj == undefined) 
{ 
    console.log("myobj is undefined"); 
} 
if(myobj2 == undefined) 
{ 
    console.log("the 2nd one is undefined"); 
} 
if(myobj) 
{ 
    console.log("myobj isn't falsy"); 
} 
if(myobj2) 
{ 
    console.log("myobj2 isn't false"); 
} 
相關問題