【工作总结】2023.11第一周

68 阅读2分钟

本周新需求暂未提出,有较多空余时间,开始自学vue3.0,使用vue3.0完成了todolist

1.该todolist可以进行增删改查,代码放置在Gitee上,地址如下

gitee.com/flaredstars…

2.js数组方法foreaEach和map的区别

网上关于二者的区别众说纷纭,争议点主要在于是否能更改原数组。其实二者的主要区别在于是否有返回值,MDN官方对二者定义如下:

forEach概念

Map概念

在我们的印象中,forEach会更改原数组,map不会更改原数组,MDN说二者的callback参数可以更改原数组,实验如下:

当arr中元素为基本类型时:

const arr1 = [1, 2, 3, 4, 5]
arr1.forEach(ele => {
  ele = ele * 2
})
console.log(arr1) //[ 1, 2, 3, 4, 5 ] 未改变
arr1.map(ele => {
  ele = ele * 2
})
console.log(arr1) //[ 1, 2, 3, 4, 5 ] 未改变

二者均未更改原数组

当arr中元素为引用类型时:

const arr2 = [
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 },
  { a: 1, b: 2, c: 3 }
]
arr2.forEach(ele => {
  ele.a = 2
})
console.log(arr2) //[ { a: 2, b: 2, c: 3 }, { a: 2, b: 2, c: 3 }, { a: 2, b: 2, c: 3 } ] 被更改
arr2.map(ele => {
  ele.b = 6
})
console.log(arr2) //[ { a: 2, b: 6, c: 3 }, { a: 2, b: 6, c: 3 }, { a: 2, b: 6, c: 3 } ] 被更改

二者均可以更改原数组

可以发现二者都可以改变数组内容为引用类型的数组,基本类型则都不可以改变,故二者的区别在于是否有返回值,返回值测试如下:

forEach返回值测试

const arr3 = [6, 6, 6, 6, 6, 6]
const res1 = arr3.forEach(ele => {
  return ele + 1
})
console.log(res1) //undefined

不管写不写return 都为undefined,即没有返回值

map返回值测试

const arr3 = [6, 6, 6, 6, 6, 6]
const res2 = arr3.map(ele => {
  ele = ele + 1
})
console.log(res2) //[ undefined, undefined, undefined, undefined, undefined, undefined ]
const res3 = arr3.map(ele => {
  return (ele = ele + 1)
})
console.log(res3) //[ 7, 7, 7, 7, 7, 7 ]

不管写不写return都返回一个新的数组,数组长度与原数组相同,没有return时,数组中每一项均未undefined,有return时,为return后表达式处理后的值。

综上,想要生成一个新数组时一定要用map,不需要返回值时可以使用佛forEach。