当前位置:首页 > JavaScript

Js实现allkeys

2026-02-02 06:23:46JavaScript

实现 allKeys 方法

在 JavaScript 中,allKeys 方法通常用于获取对象的所有可枚举属性(包括原型链上的属性)。以下是几种实现方式:

使用 for...in 循环

通过 for...in 循环遍历对象及其原型链上的所有可枚举属性:

function allKeys(obj) {
  const keys = [];
  for (const key in obj) {
    keys.push(key);
  }
  return keys;
}

const obj = { a: 1, b: 2 };
const childObj = Object.create(obj);
childObj.c = 3;

console.log(allKeys(childObj)); // ["c", "a", "b"]

结合 Object.getOwnPropertyNames 和递归

如果需要包含不可枚举属性,可以结合 Object.getOwnPropertyNames 和递归遍历原型链:

function allKeys(obj) {
  const keys = [];
  let current = obj;
  while (current !== null && current !== Object.prototype) {
    Object.getOwnPropertyNames(current).forEach(key => {
      if (!keys.includes(key)) {
        keys.push(key);
      }
    });
    current = Object.getPrototypeOf(current);
  }
  return keys;
}

const obj = { a: 1, b: 2 };
Object.defineProperty(obj, 'hidden', { enumerable: false, value: 3 });

console.log(allKeys(obj)); // ["a", "b", "hidden"]

使用 Reflect.ownKeys

如果需要包含 Symbol 类型的属性,可以使用 Reflect.ownKeys

function allKeys(obj) {
  const keys = new Set();
  let current = obj;
  while (current !== null && current !== Object.prototype) {
    Reflect.ownKeys(current).forEach(key => keys.add(key));
    current = Object.getPrototypeOf(current);
  }
  return Array.from(keys);
}

const obj = { a: 1, [Symbol('id')]: 2 };
console.log(allKeys(obj)); // ["a", Symbol(id)]

注意事项

  • for...in 会跳过 Symbol 类型的属性。
  • Object.getOwnPropertyNames 会包含不可枚举属性,但不会包含 Symbol 属性。
  • Reflect.ownKeys 是最全面的方法,包含所有自有属性(包括 Symbol 和不可枚举属性)。
  • 递归遍历原型链时需注意终止条件(Object.prototypenull)。

Js实现allkeys

标签: Jsallkeys
分享给朋友:

相关文章

怎么用Js实现图片移动

怎么用Js实现图片移动

使用JavaScript实现图片移动 通过修改CSS属性实现移动 使用JavaScript动态修改图片的style.left和style.top属性可以实现移动效果。需要将图片的position属性设…

Js实现划词翻译

Js实现划词翻译

实现划词翻译的基本思路 划词翻译的核心是监听用户鼠标选中文本的事件,获取选中内容后调用翻译API,最后以弹窗等形式展示翻译结果。以下是具体实现方法: 监听文本选中事件 通过mouseup事件监听用…

Js实现冰墩墩

Js实现冰墩墩

使用Canvas绘制冰墩墩 在JavaScript中,可以通过Canvas API绘制冰墩墩形象。以下是实现的基本代码框架: const canvas = document.getElementB…

Js实现reset

Js实现reset

使用 HTMLFormElement.reset() 方法 通过 JavaScript 直接调用表单的 reset() 方法可以重置表单内的所有输入字段为初始值: document.getElem…

Js实现utext

Js实现utext

JavaScript 实现 UText(用户文本处理) 在 JavaScript 中实现 UText(User Text)处理通常涉及文本操作、格式化或自定义功能。以下是几种常见的实现方法: 字符串…

Js实现const

Js实现const

在 JavaScript 中,const 是用于声明常量的关键字,其值在声明后不能被重新赋值。以下是关于 const 的详细说明和用法: 基本语法 const identifier = value;…