问题

我有一个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