原文链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const

const 声明创建一个只读的常量。这不意味着常量指向的值不可变,而是变量标识符的值只能赋值一次。(译者注:JavaScript中的常量和Java,C++中的常量一个意思。注意区分常量的值和常量指向的值的不同)

语法EDIT

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
常量名称,可以是任意合法的identifier(标识符)。
valueN
常量值,可以是任意合法的表达式

描述EDIT

这个声明创建了一个常量,可以在全局作用域或者函数内声明常量,常量需要被初始化。这就是说,在定义常量的同时必须初始化(这是有意义的,鉴于变量的值在初始化后就不能改变)。

常量拥有块作用域,和使用let 定义的变量十分相似。常量的值不能通过再赋值改变,也不能再次声明。

一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称。

例子EDIT

下面的例子演示了常量的特性。在浏览器的控制台试一下这个例子。

// 注意: 常量在声明的时候可以使用大小写,但通常情况下会使用全部大写英文。 

// 定义常量MY_FAV并赋值7
const MY_FAV = 7; // 在 Firefox 和 Chrome 这会失败但不会报错(在 Safari这个赋值会成功)
MY_FAV = 20; // 输出 7
console.log("my favorite number is: " + MY_FAV); // 尝试重新声明会报错
const MY_FAV = 20; // MY_FAV 保留给上面的常量,这个操作会失败
var MY_FAV = 20; // MY_FAV 依旧为7
console.log("my favorite number is " + MY_FAV); // 下面是一个语法错误
const A = 1; A = 2; // 常量要求一个初始值
const FOO; // SyntaxError: missing = in const declaration // 常量可以定义成对象
const MY_OBJECT = {"key": "value"}; // 重写对象和上面一样会失败
MY_OBJECT = {"OTHER_KEY": "value"}; // 对象属性并不在保护的范围内,下面这个声明会成功执行
MY_OBJECT.key = "otherValue";

规范EDIT

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Let and Const Declarations
Standard Initial definition.
ECMAScript 2017 Draft (ECMA-262)
Let and Const Declarations
Draft  

浏览器兼容性EDIT

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support 21 (Yes) 36 (36) 11 12 5.1
Reassignment fails 20 (Yes) 13 (13) 11 ? ?

兼容性说明EDIT

在Firefox和Chrome更早期的版本,Safari 5.1.7和Opera 12.00,如果使用const定义一个变量,这个变量的值仍然可以修改。IE6-10 不支持 const,但是IE11支持。

Firefox-specific notes

在常量被列出ECMAScript 2015 (ES6)标准很久之前,火狐就已经支持常量。  const ES6 请参照 bug 950547 and bug 611388.

    • 从 Gecko 36开始 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):

      • {const a=1};a 出现 ReferenceError 且由于作用域不在返回1 .
      • const a; 现在会出现  SyntaxError语法错误 ("missing = in const declaration"): 必须有一个初始值.
      • const a = 1; a = 2; 现在会出现 SyntaxError语法错误 ("invalid assignment to const a").

js常量的更多相关文章

  1. 5、前端--js常量、变量、5种基本数据类型(number string boolean undefined object)、运算符、流程控制、三元运算符、函数、自定义对象、内置对象、BOM操作

    变量与常量 在JS中声明变量需要使用关键字 老版本 var(全部都是全局变量) 新版本 let(可以声明局部变量) # 推荐使用let(其实问题不大) 在JS中声明常量也需要使用关键字 const # ...

  2. JavaScript 常量定义

    相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利 ...

  3. JS浏览器兼容问题

    一.JS与DOM的兼容性: (一) DOM节点的访问: 1.以前对DOM节点访问一般用“document.All.元素ID属性值”或者“document.元素ID属性值”这种简化的方法,在FireFo ...

  4. JS 获取css transform中的值

    可以参考这位博主的文章https://www.cnblogs.com/zhenwoo/p/4993780.html 不想看直接想看怎么解决的看这: var translates= document.d ...

  5. JS:关于JS字面量及其容易忽略的12个小问题

    简要 问题1:不能使用typeof判断一个null对象的数据类型 问题2:用双等号判断两个一样的变量,可能返回false 问题3:对于非十进制,如果超出了数值范围,则会报错 问题4:JS浮点数并不精确 ...

  6. 27 JavaScript的引入&注释&弹窗&变量常量&数据类型及转换&内存&垃圾回收

    JS的引入: 1 内部引入 绑定元素事件如onclick="" 绑定锚点如href="JavaScript:void(0)" script标签引入,注意:如果标 ...

  7. Thinkphp入门 一 (45)

    原文:Thinkphp入门 一 (45) 什么是框架? 就是一堆代码的集合,这些代码可以有变量.常量.函数.类等等.这些代码彼此紧密联系,彼此有合作关系.里边还有设计模式:MVC.单例.工厂等等. 为 ...

  8. html浏览器兼容性的 JavaScript语法

    1.      在FireFox中能够使用与HTML节点对象ID属性值同样的JS变量名称.可是IE中不行. 解决的方法:在命名上区分HTML节点对象ID属性值和JS变量 2.      IE不支持JS ...

  9. html浏览器兼容性 JavaScript语法

    1.      在FireFox中能够使用与HTML节点对象ID属性值同样的JS变量名称,可是IE中不行. 解决的方法:在命名上区分HTML节点对象ID属性值和JS变量 2.      IE不支持JS ...

随机推荐

  1. HDU 6441 - Find Integer - [费马大定理][2018CCPC网络选拔赛第4题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6441 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  2. linux:任务计划crontab

    crontab 简介 crontab 命令常见于 Unix 和类 Unix 的操作系统之中(Linux 就属于类 Unix 操作系统),用于设置周期性被执行的指令. crontab 命令从输入设备读取 ...

  3. 如果要写php扩展啥的, 要看什么?

    1.写PHP扩展并不难 有一定C语言基础即可.切记一定要在Linux平台下开发,不要用Windows 这里有一篇博文,可以看下http://rango.swoole.com/archives/152 ...

  4. vue中 用媒体查询 空置根节点字体大小

    在index.html中 <style> @media all and (min-width: 0px) { html{font-size: 20px;}/* 12*4.6 */ } @m ...

  5. Python yield 使用浅析(转)

    add by zhj: 说到yield,就要说说迭代器.生成器.生成器函数. 迭代器:其实就是一个可迭代对象,书上说迭代器,我个人不喜欢这个说法,有点晦涩.可迭代对象基本上可以认为是有__iter__ ...

  6. java NIO (二) 一个故事讲清楚NIO

    假设某银行只有10个职员.该银行的业务流程分为以下4个步骤: 1) 顾客填申请表(5分钟): 2) 职员审核(1分钟): 3) 职员叫保安去金库取钱(3分钟): 4) 职员打印票据,并将钱和票据返回给 ...

  7. 缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)分析

    缓存算法是指令序列,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 一.最不经常使用算法(Least Frequently Used-LFU): 它是基 ...

  8. 【Fiddler】杂乱基础学习

    1.过滤fiddler筛选 打开fiddler>Tools>Fiddler Options>HTTPS>...from remote clients only,勾选这个选项就可 ...

  9. python操作docx学习资料

    1.博客 (1)写入参考 https://www.cnblogs.com/rencm/p/6285304.html (2)读取参考 http://www.cnblogs.com/zhanghongfe ...

  10. mysql 数据操作 多表查询 多表连接查询 外链接之左连接 右连接

    1.外链接之左连接:优先显示左表全部记录   left join 在内连接的基础上保留左表的记录 即便左表有一条记录和右表没有关系,也把他留下 mysql> select * from empl ...