zoukankan      html  css  js  c++  java
  • Array.forEach当前元素的赋值问题

    let list0 = [1, 2, 3];
    list0.forEach((v, i) => {
      v = 0; // 赋值无效
      list0[i] = 0; // 赋值有效
    });
    
    let list1 = [{ val: 1 }, { val: 2 }, { val: 3 }];
    list1.forEach((v, i) => {
      v = {}; // 赋值无效 为什么
      list1[i] = { val: 0 }; // 赋值有效
      v.val = 0; // 赋值有效
    }) 

    通过打印输出发现v和list[i]确实是同一个对象,但直接修改v却没有效果,通过查阅mdn发现和forEach的内部实现有关,迭代的对象元素并非是原对象,而是一个副本,但这个副本却又拥有原对象属性的属性描述符,因此才会产生——直接修改v无效,修改v的属性有效的现象。

  • 相关阅读:
    List
    美团Leaf分布式ID生成策略
    单点登陆
    ElasticSearch
    Eureka
    Nginx
    UML
    Computer English
    加密
    Excel中把一列数据转换成逗号隔开的一行
  • 原文地址:https://www.cnblogs.com/chh1995/p/15543807.html
Copyright © 2011-2022 走看看