JavaScript 获取对象的长度

JavaScript 获取对象的长度

在 JavaScript 中,要获取对象的长度(即对象中属性的数量),可以使用以下几种方法:

  1. 使用 Object.keys():该方法返回一个对象自身(即不包括继承属性)可枚举属性的数组。
  2. 使用 Object.getOwnPropertyNames():该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性,但不包括 Symbol 属性)。
  3. 使用 Reflect.ownKeys():该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性和 Symbol 属性)。
  4. 使用 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

通过上述方法,可以根据不同需求,选择合适的方法来获取对象的长度。

posted @ 2023-01-12 11:16  飞仔FeiZai  阅读(3269)  评论(0编辑  收藏  举报