問題

我有一個JavaScript物件,是否有built-in或公認的最佳實踐方法來獲取此物件的長度?

 var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
 

  最佳答案

最強大的答案(即捕獲你在導致最少的bug時想要做的事情的意圖)是:

 Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

// Get the size of an object
var size = Object.size(myObj);
 

JavaScript中有一種約定,您的不會將東西新增到Object.toper ,因為它可以破壞各種庫中的列舉.向Object新增方法通常是安全的.


這是截至2016年的更新和廣泛部署ES5 及以外.對於IE9和所有其他現代ES5功能瀏覽器,您可以使用 Object.keys() ,所以上面的程式碼剛剛變成:

 var size = Object.keys(myObj).length;
 

這不需要修改任何現有的原型,因為現在構建了Object.keys().

編輯:物件可以有符號屬性,不能透過Object.key方法返回.所以答案不提及它們將是不完整的.

將符號型別新增到語言中,為物件屬性建立唯一的識別符號。

Object.keysObject.getOwnPropertyNames不適用於符號屬性.為了返回它們,您需要使用Object.getOwnPropertySymbols.

 var person = {
  [Symbol('name')]: 'John Doe',
  [Symbol('age')]: 33,
  "occupation": "Programmer"
};

const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1

let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2
 

  相同標籤的其他問題

javascriptjavascript-objects