当前位置:首页 > JavaScript

Js实现allkeys

2026-03-15 06:11:11JavaScript

实现 allKeys 方法

allKeys 方法的目标是获取对象及其原型链上的所有可枚举属性名。以下是几种实现方式:

使用 for...in 循环

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

结合 Object.getOwnPropertyNames 和递归

如果需要包含不可枚举属性,可以递归遍历原型链:

function allKeys(obj, includeNonEnumerable = false) {
    const keys = new Set();
    let current = obj;

    while (current !== null && current !== Object.prototype) {
        const currentKeys = includeNonEnumerable 
            ? Object.getOwnPropertyNames(current) 
            : Object.keys(current);
        currentKeys.forEach(key => keys.add(key));
        current = Object.getPrototypeOf(current);
    }

    return Array.from(keys);
}

使用 Reflect.ownKeys

Reflect.ownKeys 可以获取对象的所有属性(包括符号属性):

Js实现allkeys

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);
}

注意事项

  1. 原型链终止条件:避免遍历到 Object.prototypenull,否则会包含不必要的内置方法(如 toString)。
  2. 性能考虑:递归遍历原型链可能对性能有影响,尤其是在深层次的原型链中。
  3. 符号属性:如果需要包含符号属性,使用 Reflect.ownKeysObject.getOwnPropertySymbols

标签: Jsallkeys
分享给朋友:

相关文章

Js实现const

Js实现const

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

Js实现 toggle

Js实现 toggle

使用 classList.toggle 方法 通过 classList.toggle 可以轻松切换元素的类名。该方法接受一个类名作为参数,如果元素已存在该类名则移除,不存在则添加。 const bu…

Js实现wordclock

Js实现wordclock

实现 Word Clock 的基本思路 Word Clock 是一种以文字显示时间的时钟,例如 "IT IS HALF PAST TEN"。实现这种时钟需要将时间转换为对应的单词组合。 时间转换为单…

Js 扫描实现

Js 扫描实现

实现 JavaScript 扫描功能 JavaScript 扫描功能通常涉及文件系统遍历、内容分析或网络请求监控。以下是几种常见场景的实现方法: 文件系统扫描 使用 Node.js 的 fs 模块可…

Js实现allkeys

Js实现allkeys

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

Js实现划词翻译

Js实现划词翻译

划词翻译的实现思路 划词翻译功能可以通过监听用户鼠标选中文本的事件,获取选中的文本内容,然后调用翻译API进行翻译,最后将翻译结果显示在页面上。 获取选中文本 通过window.getSelecti…