debugging 在Javascript中是否有真正的“for ... in Object”替代方法?(用于调试目的)[duplicate]

iq3niunx  于 2022-11-24  发布在  Java
关注(0)|答案(1)|浏览(100)
    • 此问题在此处已有答案**:

List All Prototype Properties of a Javascript Object(3个答案)
Is it possible to get the non-enumerable inherited property names of an object?(11个答案)
How to iterate over all properties in object's prototype chain?(1个答案)
How do I loop through or enumerate a JavaScript object?(48个答案)
How to console.log all inherited properties?(4个答案)
3天前关闭。
机构群体在3天前审核了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
正如MDN网站上所说的"for ... in最实际的用途是用于调试目的",我也在这么做。除了使用for ... in来获得键的数组之外,还有其他方法可以得到同样的结果吗?
我在stackoverflow上读到的每个其他线程都给出了类似下面代码中的替代方案,这不是获得相同功能的解决方案。

var myp= document.createElement('p');
var a = new Array();
for (var each in myp) {  a.push(each);}
var b = Object.keys(myp);
var c = Object.getOwnPropertyNames(myp);

console.log(a,b,c);

编辑:作为关闭原因给出的"重复"有一个完全不同的问题的目的,毫不奇怪,他们也不是我的问题的答案。:/

7z5jn7bk

7z5jn7bk1#

要模拟for..in,必须遍历对象的内部原型,直到到达原型链的顶部。

const emulateForIn = (obj) => {
  const properties = new Set();
  while (obj) {
    for (const key of Object.keys(obj)) {
      properties.add(key);
    }
    obj = Object.getPrototypeOf(obj);
  }
  return [...properties];
}

console.log(emulateForIn(document.createElement('p')));

这可能不是100%符合规范,但在绝大多数情况下都是足够接近的。
也就是说,这段代码和你的原始代码都很奇怪,你在链接中引用的建议也很奇怪--如果你在调试,通常只做console.log(obj)console.dir(obj)会更容易,以免控制台被大量的属性污染(你可以在任何现代浏览器的devtools中点击它来扩展对象)。

相关问题