深入探究ES6 for…in

一、基础用法

ES6中的for…in循环与ES5中的for…in有所区别。在ES5中,使用for…in循环来迭代对象的属性,在迭代时,可以遍历对象的自有属性和继承属性。在ES6中,使用for…in循环遍历对象的属性时,只遍历对象的自有属性,不会遍历继承属性。


    const obj = {a: 1, b: 2, c: 3};
    for (let key in obj) {
      console.log(key); // 'a' 'b' 'c'
      console.log(obj[key]); // 1 2 3
    }

在上面的例子中,使用for…in循环遍历了对象obj中的属性,并打印出了属性名和属性值。需要注意的是,在循环中使用let声明变量key避免了全局变量的问题。

二、迭代顺序

在ES6中,对象中的属性是有序的,按照从添加到对象中的顺序排序。使用for…in循环会按照这个顺序迭代对象的属性。但是需要注意的是,如果对象的key是字符串,那么它们的遍历顺序是不确定的。


    const obj = {a: 1, b: 2, c: 3};
    console.log(Object.getOwnPropertyNames(obj)); // ['a', 'b', 'c']
    
    const arr = ['a', 'b', 'c'];
    for (let key in arr) {
      console.log(key); // '0' '1' '2'
      console.log(arr[key]); // 'a' 'b' 'c'
    }

在上面的例子中,第一个例子打印了对象的属性名数组,按照添加的顺序打印了a、b和c。第二个例子循环遍历了一个数组,输出了数组的下标和对应的元素。

三、遍历Map和Set

在ES6中,Set和Map是常用的数据结构。使用for…in循环可以迭代它们的值,其遍历顺序与插入顺序相同。


    const set = new Set(['a', 'b', 'c']);
    for (let val of set) {
      console.log(val); // 'a' 'b' 'c'
    }
    
    const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
    for (let key of map.keys()) {
      console.log(key); // 'a' 'b' 'c'
    }
    
    for (let val of map.values()) {
      console.log(val); // 1 2 3
    }
    
    for (let entry of map.entries()) {
      console.log(entry); // ['a', 1] ['b', 2] ['c', 3]
      console.log(entry[0]); // 'a' 'b' 'c'
      console.log(entry[1]); // 1 2 3
    }

在上面的例子中,第一个循环遍历了一个Set对象,输出了Set中的元素。第二个循环遍历了一个Map对象的key,第三个循环遍历了一个Map对象的value,而第四个循环遍历了一个Map对象的每一项entry,然后输出了entry的key和value。

四、使用Symbol.iterator方法

可以在自定义对象上使用Symbol.iterator方法来使其能够被for…of循环遍历。


    const iterableObject = {
        values: [1, 2, 3],
        [Symbol.iterator]() {
            let index = -1;
            return {
                next: () => ({ value: this.values[++index], done: !(index in this.values) })
            };
        }
    };
    
    for (let val of iterableObject) {
      console.log(val); // 1 2 3
    }

在上面的例子中,自定义对象iterableObject中定义了一个values数组和一个Symbol.iterator方法。在Symbol.iterator方法中返回一个包含next()方法的迭代器对象,每次调用next()函数遍历values数组中的值。

五、结语

通过本篇文章,我们深入探究了ES6中for…in循环的使用方法和注意事项,包括基础用法、迭代顺序、遍历Set和Map以及使用Symbol.iterator方法。在实际应用中,我们可以根据具体场景灵活使用for…in循环,提高代码的效率和可维护性。

原创文章,作者:TZMUA,如若转载,请注明出处:https://www.506064.com/n/361032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TZMUATZMUA
上一篇 2025-02-24 00:34
下一篇 2025-02-24 00:34

相关推荐

  • Python for循环求1到100的积

    Python中的for循环可以方便地遍历列表、元组、字典等数据类型。本文将以Python for循环求1到100的积为中心,从多个方面进行详细阐述。 一、for循环语法 Pytho…

    编程 2025-04-29
  • Python使用for循环打印99乘法表用法介绍

    本文介绍如何使用python的for循环语句来打印99乘法表,我们将从需要的基本知识、代码示例以及一些加强版来详细讲解。 一、基础知识 在学习如何使用for循环打印99乘法表之前,…

    编程 2025-04-29
  • Python for循环优化

    本文将介绍如何对Python中的for循环进行优化。 一、使用range()代替直接迭代 Python中的for循环本质上是一种迭代操作,可以对列表、元组、集合等数据结构进行遍历。…

    编程 2025-04-28
  • in和for的用法区别

    对于Python编程中的in和for关键词,我们在实际编码中很容易混淆。本文将从多个方面详细阐述它们的用法区别,帮助读者正确使用in和for。 一、in关键词 in是用来判断一个元…

    编程 2025-04-28
  • Python递减for循环代码的实现

    Python中的for循环可以通过递减实现,递减for循环通常用于倒序遍历列表、字符串等数据结构。在本文中,我们将从多个方面对Python递减for循环代码做详细的阐述,包括实现方…

    编程 2025-04-27
  • Python利用for循环实现三角形的绘制

    Python是一种高级编程语言,也是非常适合初学者学习的一种编程语言。本文将详细介绍如何利用Python中的for循环来实现三角形的绘制。通过本文的学习,大家可以对Python的基…

    编程 2025-04-27
  • Python for循环items用法介绍

    Python是一种高级语言,具有简单易学,代码量少,语法清晰的特点。其中for循环是Python中最常见的循环语句之一,而for循环中的items更是让我们又爱又恨的语法。下面将从…

    编程 2025-04-27
  • Python中for循环遍历列表

    本文将全方位详细介绍Python中for循环遍历列表的方法和技巧,帮助您更加深入理解并灵活运用Python中的for循环。 一、for循环遍历列表的基础用法 在Python中使用f…

    编程 2025-04-27
  • Python中for i in range()函数的用法

    本文将详细阐述Python中for i in range函数的用法。对于初学者来说,这是学习Python编程的基础之一。 一、range()函数与for循环 Python中的for…

    编程 2025-04-27
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25

发表回复

登录后才能评论