我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?

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

当前回答

为了不干扰原型或其他代码,您可以构建和扩展自己的对象:

function Hash(){
    var length=0;
    this.add = function(key, val){
         if(this[key] == undefined)
         {
           length++;
         }
         this[key]=val;
    }; 
    this.length = function(){
        return length;
    };
}

myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // will alert 2

如果始终使用add方法,长度属性将是正确的。如果你担心自己或其他人忘记使用它,你可以将其他人发布的属性计数器添加到长度方法中。

当然,您可以始终覆盖这些方法。但即使您这样做了,您的代码也可能会明显失败,从而易于调试

其他回答

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

Object.values(myObject).lengthObject.entries(myObject).length对象.keys(myObject).length

Use:

var myArray=新对象();myArray[“firstname”]=“Gareth”;myArray[“lastname”]=“Simpson”;myArray[“age”]=21;obj=对象.keys(myArray).length;控制台日志(obj)

该解决方案适用于多种情况和跨浏览器:

Code

var getTotal = function(collection) {

    var length = collection['length'];
    var isArrayObject =  typeof length == 'number' && length >= 0 && length <= Math.pow(2,53) - 1; // Number.MAX_SAFE_INTEGER

    if(isArrayObject) {
        return collection['length'];
    }

    i= 0;
    for(var key in collection) {
        if (collection.hasOwnProperty(key)) {
            i++;
        }
    }

    return i;
};

数据示例:

// case 1
var a = new Object();
a["firstname"] = "Gareth";
a["lastname"] = "Simpson";
a["age"] = 21;

//case 2
var b = [1,2,3];

// case 3
var c = {};
c[0] = 1;
c.two = 2;

用法

getLength(a); // 3
getLength(b); // 3
getLength(c); // 2

var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;var size=JSON.stringify(myObject).length;document.write(大小);

JSON.stringify(myObject)

使用ECMAScript 6内置Reflect对象,您可以轻松计算对象的财产:

Reflect.ownKeys(targetObject).length

它将为您提供目标对象自身财产的长度(重要)。

Reflect.ownKeys(target)

返回目标对象自身(非继承)属性的数组钥匙。

那是什么意思?为了解释这一点,让我们看看这个例子。

function Person(name, age){
  this.name = name;
  this.age = age;
}

Person.prototype.getIntro= function() {
  return `${this.name} is ${this.age} years old!!`
}

let student = new Person('Anuj', 11);

console.log(Reflect.ownKeys(student).length) // 2
console.log(student.getIntro()) // Anuj is 11 years old!!

您可以在这里看到,当对象仍然从其父对象继承属性时,它只返回了自己的财产。

有关更多信息,请参阅:Reflect API