2010-02-26 31 views
8

可能是this question的重複。Javascript瑣事:檢查空對象是否相等

愚蠢的javascript問題:我想檢查一個對象是否是emtpy對象。

我打電話空對象從使用空對象字面結果的對象,如:

var o = {}; 

正如預期的那樣,既不==也不===工作,因爲這兩個下面的語句

alert({}=={}); 
alert({}==={}); 

給出錯誤。表達式

例子是評估對空對象:

  • 0
  • ""
  • {a:"b"}
  • []
  • new function(){}

那麼評估空物體的最短路徑是什麼?

+0

一個有趣的問題。在我選擇的搜索引擎中快速點擊顯示它並不那麼容易!這個線程可能會幫助你一點點:http://stackoverflow.com/questions/679915/how-do-i-test-for-an-empty-javascript-object-from-json – 2010-02-26 09:24:38

回答

14
function isEmpty(o){ 
    for(var i in o){ 
     if(o.hasOwnProperty(i)){ 
      return false; 
     } 
    } 
    return true; 
} 
+1

你打敗了我幾秒鐘.... :-) – 2010-02-26 09:26:24

+5

http://api.jquery.com/jQuery.isEmptyObject/ – Zac 2010-03-03 17:20:29

0

是不是真的有確定對象是否是空的已啓用JavaScript創建一個對象,並在內部自動添加對象的constructorprototype性質一小段路。

你可以這樣創建自己的isEmpty()方法:

var obj={} 
Object.prototype.isEmpty = function() { 
    for (var prop in this) { 
     if (this.hasOwnProperty(prop)) return false; 
    } 
    return true; 
}; 
alert(obj.isEmpty()); 

因此,如果任何對象有任何屬性,則對象不爲空,否則返回真。

1

你可以使用這個語法

if (a.toSource() === "({})") 

但是這並不在IE瀏覽器。作爲一種替代的 「toSource()」 方法編碼的Ajax庫的JSON可以使用:

例如,

var o = {}; 
alert($.toJSON(o)=='{}'); // true 

var o = {a:1}; 
alert($.toJSON(o)=='{}'); // false 

的jquery + jquery.json

0
javascript: 
    cs = 'MTobj={ }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    cs = 'MTnot={a:2}; JSON.stringify(MTnot)=="{}"'; 
    alert(cs+' is '+eval(cs)); 

MTobj={ }; JSON.stringify(MTobj)=="{}" is true 
MTnot={a:2}; JSON.stringify(MTnot)=="{}" is false 

鈣veat!謹防!可能會有誤報!

javascript: 
    cs = 'MTobj={ f:function(){} }; JSON.stringify(MTobj)=="{}"'; 
    alert(cs+' is '+eval(cs)); 
    alert("The answer is wrong!!\n\n"+ 
        (cs="JSON.stringify({ f:function(){} })")+ 
          "\n\n returns\n\n"+eval(cs)); 
9

您還可以使用Object.keys()測試對象是否是 「空」:

if (Object.keys(obj).length === 0) { 
    // "empty" object 
} else { 
    // not empty 
} 
+0

這是正確的答案。對於需要在IE8上運行的人員,請檢查es5-shim庫。 – Ventura 2015-04-01 16:19:32

+0

這比(for ... in)選項慢10倍 - 請參閱http://stackoverflow.com/questions/4994201/is-object-empty?lq=1 – davidhadas 2015-12-28 10:43:18