const关键字生成常量有哪些特点?

文章详细介绍了ES6中const关键字的功能和使用规则,包括常量的块级作用域、声明时必须赋值以及值不可变的特性。对于基本数据类型,常量值不能修改;而对于复杂数据类型如数组和对象,虽然不能重新赋值,但可以修改其内部元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

consl是ES6中新增的用于声明常量的关键字,所谓常量就是值(内存地址)不能变化的量。使用const关键字声明的常量具有3个特点,下面分别进行讲解。

1.const关键字声明的常量具有块级作用域

const关键字声明的常量具有块级作用域,const关键字的作用域与let关键字的作用域相同,其声明的量只在声明所处的块级作用域有效。

下面通过代码演示const关键字声明的常量的块级作用域效果,示例代码如下。

<script>
  if {true} {
    const a = 10;
    console.1og(a): //输出结果:10
  }
  console.log (a);    //报错,a未定义
</script>

上述代码中,第3行代码在if语句块中使用const关键字声明了一个常量a并赋值为10;第4行代码输出常量a的值,结果为10;第6行代码在语句块外部输出常量a,结果会报错。这说明使用const关键字声明的常量只在所处的块级作用域内有效,也就是说常量a只能在if语句块中被访问。

2.const关键字声明常量时必须赋值

const关键字声明的是一个只读常量。常量一旦声明,值就不能改变。这意味着const关键字。

在声明常量时必须给常量赋初始化值,否则就会报错。下面通过代码演示const关键字声明常量时不赋值的情况,示例代码如下。

<script>
  const PI;//报错,常量PI未赋值
</script>

上述代码中,第2行代码使用const关键字声明了一个常量PI,但是没有给这个常量赋值,因此在程序运行时会报错。

3.const关键字声明常量并赋值后常量的值不能修改

使用const关键字声明常量,常量的值对应的内存地址不可更改,使用场景如下。

(1)对于基本数据类型(如数值、字符串),一旦赋值,值就不可修改,示例代码如下。

<script>
  const PI = 3.14;
  PI=100://报错,无法对常量赋值
</script>

上述代码中,第2行代码使用const关键字声明了一个常量PI.并给常量赋值为3.14。然后执行下一条语句,重新给PI赋值为l00时,程序在运行时会报错。

(2)对于复杂数据类型(如数组、对象),虽然不能重新赋值,但是可以更改内部的值,示例代码如下。

<script>
  const ary = [100,0200];
  ary[0] = 'a';
  ary[1] = 'b';
  console.log(ary);//可以更改数组内部的值,结果为['a','b']
  ary=['a','b'];//报错,无法对常量赋值
 </script>

上述代码中,第2行代码使用const关键字声明了一个ary数组,数组中有2个值分别为100和200。然后在第3行、第4行代码中,通过数组下标的形式找到对应的值,并更改值,此时值是可以更改成功,因为这个操作并没有更改ary数组在内存中的存储地址。下面在第6行代码中给ary这个常量重新赋值,所赋的值是一个新数组,这是不被允许的,因为此操作改变了ary常量在内存中的存储地址,所以输出结果会报错。

<think>嗯,用户问的是JavaScriptconst关键字的用途和用法。我需要先回忆一下相关知识,然后结合提供的引用资料来组织回答。 首先,根据引用1、3、4,const用于声明常量声明时必须初始化,且不能重新赋值。比如const age = 26;之后赋值age=36会报错。这点很重要,用户可能需要例子说明。 然后,块级作用域也是关键点,和let一样,比如在if块里声明同名的const变量,不会影响外部变量。引用1中的例子展示了这一点,可以引用那个例子。 接着,不可重复声明。引用1提到,重复声明const变量会语法错误,比如两次声明name。用户可能需要注意这一点,避免重复声明。 还有,虽然const变量不能重新赋值,但如果变量是对象或数组,其属性或元素可以修改。比如const arr = [1,2]; arr.push(3);是允许的。这部分可能需要解释,因为用户可能会误解const完全不可变。 暂时性死区的问题,引用5提到const也存在暂时性死区,所以在声明前访问会报错。比如console.log(a); const a=1; 会报错,而var会有提升。需要说明这一点。 使用场景方面,引用4建议在值不应改变时使用const,比如配置项、数学常数等。这有助于代码的可读性和维护性。 现在需要将这些点整理成结构清晰的回答,分点说明用途、用法、注意事项,并加入示例代码。同时,根据用户提供的引用资料,正确标注引用标记。比如在说明不可修改时引用[^1][^3][^4]。 最后,生成相关问题,比如与let的区别、修改对象属性是否允许、暂时性死区等,这些能帮助用户进一步学习。</think># JavaScript const关键字的用途及用法详解 ## 一、核心用途 1. **声明只读常量** `const`关键字用于声明不可重新赋值的常量声明时必须初始化值。尝试修改已声明常量会触发`TypeError`错误[^1][^4] ```javascript const PI = 3.1415; PI = 3; // 报错:TypeError: Assignment to constant variable ``` 2. **强制块级作用域** 与`let`类似,`const`具有块级作用域特性,在`{}`代码块内部声明常量不会污染外部作用域[^1] ```javascript const color = 'red'; { const color = 'blue'; console.log(color); // blue } console.log(color); // red ``` 3. **防止重复声明** 在同一作用域内不允许重复声明同名常量 ```javascript const NAME = 'Alice'; const NAME = 'Bob'; // SyntaxError: Identifier 'NAME' has already been declared ``` ## 二、进阶特性 1. **复合类型数据可修改性** `const`限制的是变量绑定(内存地址不变),而不是值的不可变性。对象和数组内部属性/元素仍可修改[^4] ```javascript const person = { name: 'Tom' }; person.age = 18; // 允许修改属性 const arr = [1,2]; arr.push(3); // 允许修改数组元素 ``` 2. **暂时性死区(TDZ)** 与`let`一样存在暂时性死区,声明前访问会触发`ReferenceError`[^5] ```javascript console.log(VERSION); // ReferenceError const VERSION = '1.0'; ``` ## 三、最佳实践场景 1. **数学常数/配置项** ```javascript const MAX_SIZE = 100; const API_ENDPOINT = '/v1/data'; ``` 2. **函数表达式声明** ```javascript const calculate = (a, b) => a * b; ``` 3. **模块化开发** ```javascript // 导入模块时优先使用const const { createApp } = Vue; ``` ## 四、典型错误示例 1. **未初始化声明** ```javascript const VALUE; // SyntaxError: Missing initializer in const declaration ``` 2. **修改对象引用** ```javascript const OBJ = { x: 1 }; OBJ = { x: 2 }; // TypeError: Assignment to constant variable ``` 3. **全局作用域声明** ```javascript // 浏览器环境会污染window对象 const GLOBAL_CONST = 'value'; console.log(window.GLOBAL_CONST); // undefined (与var不同) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值