为什么 ECMAScript 5 中没有 Object 的 forEach 方法?

在 ECMAScript 5 中,Array 和 NodeList 都有 forEach() 方法,但是 Object 却没有。这是因为 Object 不是一个类数组(array-like)对象,而是一个键值对的集合。在这篇文章中,我们将探讨为什么 Object 没有 forEach() 方法,以及如何使用其他方法模拟 forEach()。

为什么 Object 不是一个类数组对象?

类数组对象是具有数字索引和 length 属性的对象。例如,一个数组就是一个类数组对象,可以通过下标来访问其元素:

----- ------- - --- -- ---

------------------------ -- -- -

与之相反,Object 是一个键值对的集合,其中每个属性都有一个名字和一个值:

----- -------- - - -- -- -- -- -- - --

------------------------ -- -- -

由于 Object 没有数字索引和 length 属性,它不是一个类数组对象。因此,不能使用 forEach() 方法直接遍历其属性。

如何模拟 forEach() 方法

虽然 Object 没有内置的 forEach() 方法,但是我们可以使用其他方法模拟它。以下是两种实现方式:

使用 Object.keys() 和 forEach()

我们可以使用 Object.keys() 方法获取 Object 的所有属性名,然后使用 forEach() 方法遍历这些属性。

----- -------- - - -- -- -- -- -- - --

----------------------------------- -- -
  -------------------- -------------------
---

输出:

-- -
-- -
-- -

使用 for...in 循环

另一种方法是使用 for...in 循环遍历 Object 的属性。注意,for...in 循环不仅遍历对象的自有属性,还会遍历原型链上的属性。因此,在循环体内部需要判断一个属性是否是对象的自有属性。

----- -------- - - -- -- -- -- -- - --

--- ------ --- -- --------- -
  -- ------------------------------ -
    -------------------- -------------------
  -
-

输出:

-- -
-- -
-- -

总结

尽管 Object 不是一个类数组对象,但我们可以使用其他方法模拟 forEach() 方法来遍历它的属性。在实际开发中,我们应该根据具体情况选择合适的方法来遍历 Object,避免出现意外错误。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/29466