JavaScript 获取对象的长度
JavaScript 获取对象的长度
在 JavaScript 中,要获取对象的长度(即对象中属性的数量),可以使用以下几种方法:
- 使用
Object.keys()
:该方法返回一个对象自身(即不包括继承属性)可枚举属性的数组。 - 使用
Object.getOwnPropertyNames()
:该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性,但不包括 Symbol 属性)。 - 使用
Reflect.ownKeys()
:该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性和 Symbol 属性)。 - 使用
for...in
: 该方法依次访问一个对象及其原型链中所有可枚举的属性。
以下是每种方法的示例代码:
使用 Object.keys()
const x = {
f: 6,
};
const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;
Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});
const symbolKey = Symbol("e");
obj[symbolKey] = 5;
const length = Object.keys(obj).length;
console.log(length); // 输出 3
说明:
Object.keys()
只计算对象自身(即不包括继承属性)的可枚举属性。- 添加了一个继承属性
f
、一个不可枚举属性d
和一个 Symbol 属性symbolKey
。 - 输出对象
obj
的长度为 3。
使用 Object.getOwnPropertyNames()
const x = {
f: 6,
};
const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;
Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});
const symbolKey = Symbol("e");
obj[symbolKey] = 5;
const length = Object.getOwnPropertyNames(obj).length;
console.log(length); // 输出 4
说明:
Object.getOwnPropertyNames()
计算对象自身(即不包括继承属性)的所有属性,包括不可枚举属性(除了 Symbol 属性)。- 添加了一个继承属性
f
、一个不可枚举属性d
和一个 Symbol 属性symbolKey
。 - 输出对象
obj
的长度为 4。
使用 Reflect.ownKeys()
const x = {
f: 6,
};
const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;
Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});
const symbolKey = Symbol("e");
obj[symbolKey] = 5;
const length = Reflect.ownKeys(obj).length;
console.log(length); // 输出 5
说明:
Reflect.ownKeys()
计算对象自身的(即不包括继承属性)所有属性,包括不可枚举属性和 Symbol 属性。- 添加了一个继承属性
f
、一个不可枚举属性d
和一个 Symbol 属性symbolKey
。 - 输出对象
obj
的长度为 5。
使用 for...in
语句
const x = {
f: 6,
};
const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;
Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});
const symbolKey = Symbol("e");
obj[symbolKey] = 5;
let count = 0,
count_all = 0;
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
count++;
}
count_all++;
}
console.log(count); // 3
console.log(count_all); // 4
说明:
- 使用
for...in
循环遍历对象的属性并计数的方法来获取对象的长度,可计算自有属性和继承属性,但不包括不可枚举属性和 Symbol 属性。 - 添加了一个继承属性
f
、一个不可枚举属性d
和一个 Symbol 属性symbolKey
。
通过上述方法,可以根据不同需求,选择合适的方法来获取对象的长度。