禁用内置方法时获取对象自有键及解决ESLint guard-for-in规则问题
获取对象自有属性键的实现方案
问题说明
需要实现一个函数,将对象的所有自有键转换为数组,但存在以下限制:
- 禁用所有数组和对象的内置方法(包括
Object.keys()、hasOwnProperty()) - 仅允许使用
for in循环 - 生效的ESLint规则要求必须校验
for in循环的键并非来自对象原型
原实现因依赖受限的hasOwnProperty()方法无法使用:
function getKeys(obj) { const keysArr = []; for (const key in obj) { if(obj.hasOwnProperty(key)){ // 该原生方法受限不可用 keysArr.push(key); } } return keysArr; }
可行解决方法
通过遍历对象的浅拷贝展开版本{...obj},可以自动过滤原型链上的属性,只保留对象的自有属性。修改后的代码如下:
function getKeys(obj) { const keysArr = []; for (const key in {...obj}) { keysArr.push(key); } return keysArr; }
补充说明
该方案能有效过滤原型属性,但无法直接消除ESLint的guard-for-in规则报错,可通过在代码块添加注释忽略该规则:// eslint-disable-next-line guard-for-in。
内容的提问来源于stack exchange,提问作者Ramon
相关产品推荐
相关产品推荐

