2014-02-13 61 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"); 
} 
相关问题