如何得到一个对象的真实长度?看看 ECMAScript 2021 创建 Iterable 的黑科技

阅读时长 4 分钟读完

在前端开发中,我们经常需要获取对象的长度,例如数组的长度。而在 JavaScript 中,我们可以使用 length 属性来获取数组的长度。但是对于对象来说,我们通常使用 Object.keys(obj).length 或者 Object.values(obj).length 来获取对象的长度。但是这种方式只能获取对象属性的数量,而不能获取对象的真实长度,因为一个对象可能会有一些被隐藏的属性或者方法,这些属性和方法并不会被 Object.keys 或者 Object.values 所获取到。那么如何获取一个对象的真实长度呢?今天我们来介绍一种黑科技:Iterable。

Iterable 是什么?

在 ECMAScript 2015 中,引入了一种新的数据类型:Iterable。Iterable(可迭代对象)是具有 Symbol.iterator 属性的对象,该属性指向一个返回迭代器的函数。迭代器是一个具有 next() 方法的对象,该方法返回包含 value 和 done 属性的对象。value 属性为当前迭代的值,done 属性表示迭代是否结束。我们可以通过 for...of 循环来遍历 Iterable 对象中的元素。

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

--- ---- ----- -- --------- -
  -------------------
-
-- -------
-- -
-- -
-- -
展开代码

在 ECMAScript 2021 中,Iterable 被扩展用于创建一些新的内置对象,其中包括 ObjectStringTypedArray

如何获取对象的真实长度?

在 ECMAScript 2021 中,Object 对象被扩展成了一个 Iterable,可以用于获取对象的真实长度。

上面的代码中,我们将 obj 对象转换成一个数组,然后获取数组的长度。由于 Object 对象是一个 Iterable,所以我们可以将其转换成一个数组。这种方式可以获取对象的所有属性和方法的数量,包括那些被隐藏的属性和方法。

如果你使用的是旧版的 JavaScript,你也可以使用类似的方式来获取对象的真实长度。

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

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

------------------------------- -- -
展开代码

上面的代码中,我们分别使用 Object.keysObject.values 获取对象的键和值,然后将它们合并成一个数组。由于这个数组也包括了对象隐藏的属性和方法,所以它的长度就是对象的真实长度。

Iterable 的其他用途

除了用于获取对象的真实长度之外,Iterable 还有其他很多用途。我们可以将它用于循环、遍历以及数组的操作中。

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

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

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

--------------------- -- --- -- --
展开代码

上面的代码中,我们将数组 arr 转换成了一个 Iterable,然后使用 for...of 循环遍历数组中的元素,将每个元素乘以 2 并输出。我们还将数组 arr 转换成了一个数组,然后使用 map 方法将数组中的每个元素乘以 2,并返回一个新的数组。

小结

通过本文的学习,我们知道了如何使用 Iterable 来获取对象的真实长度。Iterable 还有很多其他的用途,可以用于循环、遍历以及数组的操作中。在实际开发中,我们可以根据需要使用 Iterable 来简化代码并提高效率。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6795e273504e4ea9bdc1dfb3

纠错
反馈

纠错反馈

程序员教程

精选优质教程,助你快速提升技术实力

程序员面试题库

海量优质面试题,助你轻松应对技术面试