吃完晚饭休息, 随便发点东西
之前半夜无聊发了点东西, 关于如何优雅地遍历对象 /t/456374
楼下说使用 for...in 遍历对象的 key
然而 for...in 的前提是, 你需要保证 Array 的原型没有被改变过.
为啥? 因为 for...in 会遍历所指定对象全部 enumerable, 如果说你使用的某个库重写了 Array 的原型, 那么遍历的结果就会很奇怪了, 比如说
Array.prototype.val = 123;
obj = {1: 'a', 2: 'b'}
for (const key in Object.keys(obj)) {
console.log(key);
}
上面代码的结果是 0, 1, val, 所以使用 for...in 必须要加 hasOwnProperty.
不然就乖乖用 forEach.
多说一句, 正常情况自己是不会重写 Array 的原型的, 但是你不能保证你用的第三方库没使用这种黑魔法.
再多说一句, 如果重写某个非 enumerable 的属性, 那么该属性还是 enumerable 的, 如 Array.forEach = something, for...in 还是无法遍历的.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.