簡體   English   中英

如何測試此Javascript對象是否具有任何屬性?

[英]How can I test whether this Javascript object has any properties?

我有一些代碼可以向對象添加屬性,如下所示:

var MyObject = new Object();

if (....) { MyObject.prop1 = .... ; }
if (....) { MyObject.prop2 = .... ; }
if (....) { MyObject.prop3 = .... ; }

在完成所有這些if語句之后,我想測試並查看MyObject是否具有屬性。 我不想測試它是否有prop1 || prop2 || prop3 prop1 || prop2 || prop3 prop1 || prop2 || prop3因為有12個屬性可以添加。

我如何測試它是否至少有一個? 我試過if (MyObject)但當然不行,因為它只測試對象的存在。 對於對象來說,這些就像一個簡單的單行(MyArray.length)嗎?

如果你在ECMAScript5之前的環境中工作,那么使用一個小循環很容易:

var found = false, name;
for (name in MyObject) {
    if (MyObject.hasOwnProperty(name)) {
        found = true;
        break;
    }
}

或者因為你正在使用var MyObject = new Object(); 創建它(BTW,你可以只使用var MyObject = {}; ),你實際上並不需要hasOwnProperty調用:

var found = false, name;
for (name in MyObject) {
    found = true;
    break;
}

for..in循環for..in一個對象的可枚舉屬性,它既有自己的屬性,也有從它的原型繼承的屬性; hasOwnProperty告訴您屬性是來自對象本身還是原型。 您添加的所有屬性都是可枚舉的,因此它們將顯示在循環中。 原始對象( {} )最初沒有可枚舉的屬性,除非有人一直在使用Object.prototype (這是一個非常糟糕的想法 ),因此上面的第二個循環。

ECMAScript5(幾年前發布,不受舊版瀏覽器的支持,即使在最近的瀏覽器中支持也有所不同)添加了一些可用於此的功能。 可能最相關的是Object.keys ,它返回對象的“自己”屬性的名稱數組(不是它從原型繼承的屬性)。 這意味着你不需要循環:

if (Object.keys(MyObject).length) { // Only on ES5-compliant browsers
    // Yes it has at least one
}

嘗試

Object.getOwnPropertyNames(MyObject).length; 

這將為您提供對象自己的屬性數。

文檔

Object.getOwnPropertyNames返回一個數組,其元素是與obj上直接找到的可枚舉和不可枚舉屬性相對應的字符串。

如果要支持沒有Object.getOwnPropertyNames舊瀏覽器,請使用以下命令:

var getPropertyNames = Object.getOwnPropertyNames || function(obj) {
  var propNames = [];
  for (var propName in obj) {
    if(obj.hasOwnProperty(propName)) {
      propNames.push(propName);
    }
  }
  return propNames;
}  

getPropertyNames(MyObject).length; // number of own properties

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM