js可变变量,js不可变对象
终极管理员 知识笔记 126阅读
在JavaScript中可变Mutable和不可变Immutable主要是指数据类型的特性。
【可变指即使没有创建一个全新的值也可以更改它。在 JavaScript 中对象和数组默认都是可变的但是原始值是不可变的——一旦创建原始值它就不能被更改尽管持有它的变量可能会再次重新分配到其它值。

除了 Object 以外所有类型都定义了表示在语言最低层面的不可变值。我们将这些值称为原始值。在JavaScript中对象是唯一可变的值。
在 JavaScript 中原始数据类型primitive data type原始数值primitive value是一种既非对象也无方法或属性的数据。】

在JavaScript中数据类型是否可变主要取决于它是原始类型Primitive还是对象类型Object。在JavaScript中大多数对象都是可变的少许例外内置对象Map和Set是可变的但内置对象Math对象就是不可变的正则表达式是对象类型但它们的模式和标志在创建后是不可变的。
可变Mutable如果一个数据类型是可变的那么它的值可以在创建后被改变。在JavaScript中对象、数组和函数是可变的。例如
let obj { name: John };
obj.name ">">; // 可以改变对象的属性值
console.log(obj); // 输出 {name: ">">}对象已经被改变
let arr [1, 2, 3];
arr[0] 4; // 可以改变数组的第一个元素
console.log(arr); // 输出 [4, 2, 3]数组已经被改变
函数也是JavaScript中的可变类型。你可以在运行时添加、修改或删除函数的属性。下面是一个例子
// 定义一个函数
function greet() {
console.log(Hello, world!);
}
// 给函数添加一个属性
greet.language English;
// 输出为函数新添加的属性
console.log(greet.language); // 输出 English
不可变Immutable如果一个数据类型是不可变的那么它的值在创建后就不能被改变。在JavaScript中原始数据类型如字符串、数字、布尔值、null、undefined和Symbol是不可变的。例如
let str Hello;
str[0] W; // 这不会改变str的值str仍然是Hello
console.log(str); // 输出 hello原字符串并未改变
在这个例子中尽管我们试图改变字符串的第一个字符但是字符串的值并没有改变。这是因为在JavaScript中字符串是不可变的。
在JavaScript中大多数对象确实是可变的。这意味着我们可以更改对象的属性或者添加新的属性。比如我们可以创建一个空的对象然后给它添加属性
let obj {};
obj.name John;
然后我们还可以修改这个属性
obj.name ">">;
但是有一些对象是不可变的。比如你提到的Math对象和正则表达式对象。Math对象是一个内置对象提供了一些数学常数和函数。我们不能更改这个对象。正则表达式对象在创建后也是不可变的。
另外虽然Map和Set是可变的但是它们的键是不可变的。即我们可以添加或删除键值对但是不能更改已经存在的键。