使用JavaScript创建二维数组常犯的错误

Array(3).fill(Array(3).fill(0)) === Array(3).fill(0).map((value) => Array(3).fill(0)) 为什么返回false?

  • Array.prototype.fill() 方法会用一个固定的值填充一个数组。
  • Array.prototype.map() 方法会创建一个新的数组,其中每个元素都是原数组中对应元素经过一个函数处理后的结果。
  • 当使用 fill() 方法填充一个二维数组时,如果传入的参数是一个引用类型(如对象或数组),那么所有的子数组都会指向同一个引用,而不是创建新的副本。
  • 当使用 map() 方法创建一个二维数组时,如果传入的函数返回一个新的数组,那么每个子数组都会是独立的副本,而不是共享同一个引用。
  • 因此,使用 fill() 方法和 map() 方法得到的二维数组在内存中存储的方式不同,所以它们之间不能用 === 运算符进行严格相等比较。