117.info
人生若只如初见

const和readonly有何区别

constreadonly 在 JavaScript 中都用于声明不可变的变量,但它们之间存在一些关键区别:

  1. 声明方式const 用于声明一个常量变量,其值在声明时必须被赋值,且之后不能再次修改。而 readonly 用于声明一个只读的属性,它可以用于声明对象属性或数组元素,其值在声明时可以不被赋值,但之后也不能再次修改。
  2. 作用域const 声明的变量具有块级作用域,它只在声明它的代码块内有效。而 readonly 声明的属性具有对象级作用域,它只在定义它的对象内有效。
  3. 赋值:对于 const 声明的变量,其值在声明时必须被赋值,且之后不能再次修改。而对于 readonly 声明的属性,其值在声明时可以不被赋值,但之后也不能再次修改。需要注意的是,const 变量可以是对象或数组,但它们的属性仍然是可变的。而 readonly 属性必须是对象的属性或数组的元素。

以下是一些示例代码,以更好地理解 constreadonly 的区别:

// 使用 const 声明一个常量变量
const pi = 3.14;
pi = 3.14159; // 报错:TypeError: Assignment to constant variable.

// 使用 const 声明一个具有块级作用域的变量
if (true) {
  const message = "Hello, world!";
}
console.log(message); // 报错:ReferenceError: message is not defined.

// 使用 readonly 声明一个只读的属性
const obj = {
  name: "John",
  age: 30,
  readonly address: "123 Main St",
};
obj.address = "456 Elm St"; // 报错:TypeError: Cannot assign to read only property 'address' of object 'obj'.

// 使用 readonly 声明一个具有对象级作用域的属性
const arr = [1, 2, 3];
Object.defineProperty(arr, "sum", {
  value: function () {
    return this.reduce((a, b) => a + b, 0);
  },
  writable: false, // 等同于 readonly
});
arr.sum = 6; // 报错:TypeError: Cannot assign to read only property 'sum' of object '[1, 2, 3]'.

需要注意的是,constreadonly 不能互换使用。const 声明的变量不能被重新赋值,但它的属性仍然是可变的;而 readonly 声明的属性不能被重新赋值,也不能被删除。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fef17AzsNAgFXAg.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 关键字用于声明一个常量,即其值在初始化后不能被修改。...

  • c#正则表达式如何处理嵌套结构

    在C#中,处理正则表达式中的嵌套结构稍微复杂一些,因为C#的正则表达式引擎(System.Text.RegularExpressions.Regex)不支持递归匹配。但是,你可以使用一些技巧...

  • c#正则表达式怎样提高匹配准确率

    在C#中,提高正则表达式匹配准确率的技巧包括: 使用非贪婪匹配:默认情况下,正则表达式会尽可能多地匹配字符。通过在量词后添加?,可以使其变为非贪婪模式,从...

  • c#正则表达式在安全性方面怎样考虑

    C#中的正则表达式在安全性方面主要需要考虑以下几个方面: 避免使用不安全的正则表达式方法:某些正则表达式方法可能会导致安全漏洞,例如Regex.Replace和Regex....

  • c#正则表达式如何应对文本多样性

    C#中的正则表达式在应对文本多样性时,可以通过以下几种方法来提高匹配的准确性和灵活性: 使用非贪婪匹配:默认情况下,正则表达式会尽可能多地匹配字符。通过在...