117.info
人生若只如初见

const和readonly如何保证数据不变

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 保证属性值在初始化后不可变,但属性的引用仍然可以改变(对于对象的属性)或在类的构造函数之外无法修改(对于类的属性)。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fea7fAzsNAgFWBg.html

推荐文章

  • const和readonly在内存分配上有何不同

    const 和 readonly 都可以用来声明常量,但它们在内存分配和使用上有一些不同之处。
    const 关键字可以用于修饰变量,表示该变量的值在初始化后不能被修改。...

  • const和readonly能互相替换吗

    const和readonly在JavaScript中不能互相替换,它们有着不同的特性和用途。
    const声明的变量是常量,一旦赋值后就不能再改变。然而,如果const声明的是一个对...

  • const和readonly怎样影响编译

    const 和 readonly 都是用于声明变量的关键字,但它们之间有一些区别,这些区别会影响编译。 const: const 关键字用于声明一个常量,即其值在初始化后不能被修改...

  • const和readonly适用哪些场景

    const 和 readonly 都是用于声明变量的关键字,但它们的应用场景和特性有所不同。
    const
    const 关键字用于声明一个常量,即其值在初始化后不能被修改。...

  • android canvas能进行离屏渲染吗

    Android Canvas可以进行离屏渲染。离屏渲染指的是在内存中的Bitmap上绘制图形,然后再将这个Bitmap绘制到屏幕上的Canvas上。这种方式可以提高绘图效率,减少对屏...

  • android canvas怎样实现交互功能

    在Android中,Canvas本身并不提供直接的交互功能。但是,你可以通过以下几种方法来实现Canvas的交互功能: 触摸事件处理:你可以为Canvas或其父布局设置触摸事件...

  • android canvas如何处理屏幕适配

    在Android开发中,处理Canvas屏幕适配通常涉及以下几个步骤: 了解屏幕尺寸和密度: 使用DisplayMetrics类来获取屏幕的宽度、高度、密度等信息。
    getResour...

  • android canvas在内存管理上有何技巧

    在Android中,Canvas的内存管理是一个重要的方面,以下是一些技巧和最佳实践: 避免频繁创建和销毁Canvas对象:频繁地创建和销毁Canvas对象会消耗大量的内存,并...