为了账号安全,请及时绑定邮箱和手机立即绑定

ES6 Array.find()方法问题

ES6 Array.find()方法问题

长风秋雁 2019-03-15 18:53:35
问题:关于通过find方法查找出来的值,并修改该值,原始数组是否修改在该数组元素为原始类型和对象中表现不一样。现象:使用find方法查找出来元素,并修改该元素:如果这个元素是个原始类型的时候,原来的数组不会被修改;但如果这个元素是个对象的,原来的数组会被修改?示例代码:// 数组中元素为原始类型const courses = [    "courses1",      "courses2",      "course3"];let course = courses.find(item => item === "courses1");console.log(courses); // ["courses1", "courses2", "course3"]course = "new course";console.log(courses); // ["courses1", "courses2", "course3"]// 数组中元素为对象const courses = [     { "id": 1, "name": "course1" },     { "id": 2, "name": "course2" },     { "id": 3, "name": "course3" } ];let course = courses.find(item => item.id === 1);console.log(courses); course.name = "new course"; // [{ id: 1, name: "course1" }, { id: 2, name: "course2" }, { id: 3, name: "course3" }]console.log(courses); // [{ id: 1, name: "new course" }, { id: 2, name: "course2" }, { id: 3, name: "course3" }]
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

和find函数没关系,了解下基础类型和应用类型。
基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的。
基础类型:

let a = 1
b = a
b = 2
console.log(a)
//1

基本类型的复制就是在栈内存中开辟出了一个新的存储区域用来存储新的变量,这个变量有它自己的值,互不影响。
引用变量:

let obj1 = {a:1}let obj2 = obj1
obj2.a = 2console.log(obj1)// {a:2}

obj1和obj2这两个引用指向同一内存(对象在堆内存里),任何一个引用都可以做更改,所以一个改了,另一个也变了。


查看完整回答
1 反对 回复 2019-03-15
?
守候你守候我

TA贡献1802条经验 获得超10个赞

你把const替换成let或者var,再试试?

看错问题了告辞


查看完整回答
反对 回复 2019-03-15
  • 2 回答
  • 0 关注
  • 1030 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信