温馨提示×

const和readonly如何保证数据不变

小樊
83
2024-10-12 17:14:19
栏目: 编程语言

constreadonly 都可以用来声明常量,但它们的使用场景和作用略有不同。

const 用于声明一个在整个生命周期都不变的变量,即其值在初始化后不能被重新赋值。这意味着 const 变量必须是基本数据类型(如字符串、数字、布尔值等)或者一个不可变的引用类型(如不可变的数组、对象等)。对于引用类型,const 只保证引用本身不变,而引用的对象的内容仍然可以改变。

示例:

const num = 42; // 基本数据类型,不可变
const str = "hello"; // 基本数据类型,不可变
const arr = [1, 2, 3]; // 引用类型,但数组内容不可变
const obj = { key: "value" }; // 引用类型,但对象内容不可变(需要使用 Object.freeze())

readonly 用于声明一个只读的属性,即其值在初始化后不能被重新赋值。readonly 可以用于修饰对象的属性或者类的属性。对于修饰对象的属性,readonly 只保证属性值不可变,但属性的引用仍然可以改变。对于修饰类的属性,readonly 保证属性值不可变,并且在类的构造函数之外无法修改。

示例:

const obj = {
  key: "value",
  readonly anotherKey: "anotherValue", // 只读属性
};

obj.key = "newValue"; // 报错:TypeError: Cannot assign to read only property 'key' of object
obj.anotherKey = "anotherNewValue"; // 报错:TypeError: Cannot assign to read only property 'anotherKey' of object

class MyClass {
  readonly myProperty: string;

  constructor(myProperty: string) {
    this.myProperty = myProperty;
  }
}

const instance = new MyClass("initialValue");
instance.myProperty = "newValue"; // 报错:TypeError: Cannot assign to read only property 'myProperty' of object

总结:

  • const 保证变量本身及其引用的对象内容在初始化后不可变(对于基本数据类型)或不可变引用(对于引用类型)。
  • readonly 保证属性值在初始化后不可变,但属性的引用仍然可以改变(对于对象的属性)或在类的构造函数之外无法修改(对于类的属性)。

0