ES6新特性:const关键字详解

文章目录

    • [1 声明必需赋初值](#1 声明必需赋初值)
    • [2 声明的变量不能被重新赋值](#2 声明的变量不能被重新赋值)
      • [2.1 一般情况](#2.1 一般情况)
      • [2.2 如果变量是一个对象,可以修改对象的属性](#2.2 如果变量是一个对象,可以修改对象的属性)
      • [2.3 如果变量是一个数组,可以修改数组的元素](#2.3 如果变量是一个数组,可以修改数组的元素)
    • [3 声明的变量一般用大写](#3 声明的变量一般用大写)
    • [4 块级作用域](#4 块级作用域)
    • [5 不允许重复声明](#5 不允许重复声明)

const是ES6中新增的一个关键字,用于声明一个只读的常量,一旦声明后就不能再被修改。有以下几个特点

1 声明必需赋初值

在使用const声明变量时,一定要在声明时就给变量初始化,否则编译会报错'const' declarations must be initialized.

2 声明的变量不能被重新赋值

2.1 一般情况

一般的,声明的变量不能被重新赋值,否则会报错。Uncaught TypeError: Assignment to constant variable.

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        const PI = 3.14;
        PI = 3.1415;	//报错 
    </script>
</body>

</html>

2.2 如果变量是一个对象,可以修改对象的属性

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        const obj = {
            name: 'Tom',
            age: 3
        }
        // 修改对象的属性值
        obj.age = 8;
        console.log('obj:', obj);
    </script>
</body>

</html>

控制台输出:

但是,如果试图给对象重新赋值,则会报错 Uncaught TypeError: Assignment to constant variable.

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        const obj = {
            name: 'Tom',
            age: 3
        }
        
        // 试图给对象重新赋值,报错Uncaught TypeError: Assignment to constant variable.
        obj={
            name: 'Tom',
            age: 8
        }
    </script>
</body>

</html>

2.3 如果变量是一个数组,可以修改数组的元素

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        const Arr = [1, 2, 3];
        Arr[0] = 99;
        console.log('Arr:', Arr);
    </script>
</body>

</html>

控制台输出:

但是,如果试图给数组重新赋值,则会报错 Uncaught TypeError: Assignment to constant variable.

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        const Arr = [1, 2, 3];
        Arr = [99, 2, 3];   // 尝试给Arr重新赋值,报错:Uncaught TypeError: Assignment to constant variable.
        console.log('Arr:', Arr);
    </script>
</body>

</html>

3 声明的变量一般用大写

用小写并不会出错,只是习惯上,用大写表示常量。

js 复制代码
const PI = 3.1415926;

4 块级作用域

let 关键字一样,const 关键字也具有块级作用域。

块级作用域是指变量只在定义它们的块内部可见。这意味着,使用 const 声明的变量只能在声明它的块级作用域内使用,而不会影响外部作用域。

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6新特性:const关键字</title>
</head>

<body>
    <script>
        {
            const PI = 3.14;
            console.log("块内部:", PI); //块内部: 3.14
        }
        console.log("块外部:", PI); //报错,PI is not defined
    </script>
</body>

</html>

5 不允许重复声明

使用 const 声明的变量不能被重复声明。


总结:声明对象类型 的变量,使用 const,声明非对象类型 的变量使用 let

相关推荐
kyriewen44 分钟前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
JNX_SEMI1 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
anOnion1 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
随风一样自由1 小时前
【前端领域】2026最新前端领域全梳理(框架/工具/AI/跨端/底层标准/就业趋势)
前端·人工智能·前端框架
这是个栗子1 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun2 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript
大爱一家盟2 小时前
告别卡点BGM同质化 2026原创卡点音乐素材下载网站 TOP5 推荐
大数据·前端·人工智能
彦为君2 小时前
算法思维与经典智力题
java·前端·redis·算法
aa小小3 小时前
localhost 访问异常排查笔记
前端
格子软件3 小时前
2026年GEO优化系统源码的分布式状态机深度拆解
java·前端·vue.js·vue·geo