我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
当前回答
我同样需要计算通过websocket接收的对象所使用的带宽。对我来说,只要找到Stringified对象的长度就足够了。
websocket.on('message', data => {
dataPerSecond += JSON.stringify(data).length;
}
其他回答
如果你知道你不必担心hasOwnProperty检查,你可以这样使用Object.keys()方法:
Object.keys(myArray).length
上述部分的变化如下:
var objLength = function(obj){
var key,len=0;
for(key in obj){
len += Number( obj.hasOwnProperty(key) );
}
return len;
};
这是一种更优雅的方式来集成hasOwnProp。
这是最跨浏览器的解决方案。
这比接受的答案更好,因为它使用本机Object.keys(如果存在)。因此,它是所有现代浏览器中速度最快的。
if (!Object.keys) {
Object.keys = function (obj) {
var arr = [],
key;
for (key in obj) {
if (obj.hasOwnProperty(key)) {
arr.push(key);
}
}
return arr;
};
}
Object.keys(obj).length;
使用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
简单的解决方案:
var myObject = {}; // ... your object goes here.
var length = 0;
for (var property in myObject) {
if (myObject.hasOwnProperty(property)){
length += 1;
}
};
console.log(length); // logs 0 in my example.