我
请解释可变对象和不可变对象之间的区别。
难度:
- 什么是 JavaScript 中的不可变对象的例子?
- 不变性有什么优点和缺点?
- 你如何在自己的代码中实现不变性?
可变对象 在创建之后是可以被改变的。
不可变对象 在创建之后是不可以被改变的。
- 在
JavaScript
中,string
和number
从设计之初就是不可变(Immutable)。 - 不可变 其实是保持一个对象状态不变,这样做的好处是使得开发更加简单,可回溯,测试友好,减少了任何可能的副作用。但是,每当你想添加点东西到一个不可变(Immutable)对象里时,它一定是先拷贝已存在的值到新实例里,然后再给新实例添加内容,最后返回新实例。相比可变对象,这势必会有更多内存、计算量消耗。
- 比如:构造一个纯函数
js
const student1 = {
school: "Baidu",
name: "HOU Ce",
birthdate: "1995-12-15",
};
const changeStudent = (student, newName, newBday) => {
return {
...student, // 使用解构
name: newName, // 覆盖name属性
birthdate: newBday, // 覆盖birthdate属性
};
};
const student2 = changeStudent(student1, "YAN Haijing", "1990-11-10");
// both students will have the name properties
console.log(student1, student2);
// Object {school: "Baidu", name: "HOU Ce", birthdate: "1995-12-15"}
// Object {school: "Baidu", name: "YAN Haijing", birthdate: "1990-11-10"}