不变性(immutability),指的是一个东西被创建以后就不会发生变化了。函数式编程里的东西一般都具有这种特性。让对象具有不变性是一件好事,如果对象需要发生改变,你应该去创建一个新的对象,在新的对象里包含发生改变的部分,不要直接去修改对象本身。
下面这几个单词经常会出现:
- immutability:名词,不变性。表示东西不会发生改变的这种特性。
- immutable:形容词,不可变。可以说一个东西 immutable ,表示这个东西不会发生变化。
- mutability:名词,可变性,突变性,易变性。表示东西会发生改变的这种特性。
- mutate:动词,突变。
- mutable:形容词,可变。
在 JavaScript 里面,字符串与数字都具有不变性。也就是一个字符串一旦被创建,它的值就不会发生变化。但是 JavaScript 里的数组或对象是可变的,让它们不可变可以使用 Object.freeze 冻结一下它们(只能冻一层),也可以使用一些外部库,比如 Immutable.js。
实验一下:
let name = 'ninghao.net' undefined name[7] "." name[7] = '-' "-" name "ninghao.net"
在上面尝试修改 name 的值(把 ninghao.net 里的点“ . ” 换成 “ - ” ),办不到。因为字符串这种值不能被改变。