当前位置:首页 > JavaScript

Js实现allkeys

2026-03-15 06:11:11JavaScript

实现 allKeys 方法

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

Js实现allkeys

使用 for...in 循环

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

结合 Object.getOwnPropertyNames 和递归

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

Js实现allkeys

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 可以获取对象的所有属性(包括符号属性):

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实现reset

Js实现reset

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

Js轮训实现

Js轮训实现

轮询的实现方法 轮询(Polling)是一种客户端定期向服务器发送请求以获取最新数据的技术。适用于实时性要求不高的场景,实现简单但可能增加服务器负载。 使用setInterval实现基础轮询 通过s…

Js实现 toggle

Js实现 toggle

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

Js实现decimal

Js实现decimal

实现 Decimal 类型的方法 在 JavaScript 中,原生不支持精确的 Decimal 类型,但可以通过以下方法实现高精度小数运算。 使用第三方库 推荐使用成熟的第三方库来处理 Decim…

怎么用Js实现图片移动

怎么用Js实现图片移动

使用CSS和JavaScript实现图片移动 通过修改图片的CSS属性(如left、top或transform)可以实现图片移动效果。以下是两种常见方法: 方法一:通过修改left和top属性 假设…

Js实现划词翻译

Js实现划词翻译

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