JavaScript参考手册
声明 | Statements
const
常量是块范围的,就像使用let
语句定义的变量一样。常量的值不能通过重新赋值而改变,并且不能重新声明。
语法
const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];
nameN
常量的名称,可以是任何合法的标识符。valueN
常数值; 这可以是任何法律表达式,包括函数表达式。
描述
该声明创建一个常量,其作用域可以是全局的(在窗口对象上),也可以是声明它的块的本地。需要一个常量的初始值; 也就是说,您必须在声明它的同一个语句中指定它的值(这是有道理的,因为它以后不能更改)。
在const
创建了一个只读的参照值。它并不意味着其持有的价值是不变的,只是该变量标识符不能被重新分配。例如,在内容是对象的情况下,这意味着对象的内容(例如,其参数)可以被改变。
关于“时间死区”的所有事项适用于let
和const
。
常量不能在同一范围内与函数或变量共享其名称。
示例
以下示例演示常量的行为。在浏览器控制台中试试这个。
// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.
// define MY_FAV as a constant and give it the value 7
const MY_FAV = 7;
// this will throw an error
MY_FAV = 20;
// will print 7
console.log('my favorite number is: ' + MY_FAV);
// trying to redeclare a constant throws an error
const MY_FAV = 20;
// the name MY_FAV is reserved for constant above, so this will fail too
var MY_FAV = 20;
// this throws an error too
let MY_FAV = 20;
// it's important to note the nature of block scoping
if (MY_FAV === 7) {
// this is fine and creates a block scoped MY_FAV variable
// (works equally well with let to declare a block scoped non const variable)
let MY_FAV = 20;
// MY_FAV is now 20
console.log('my favorite number is ' + MY_FAV);
// this gets hoisted into the global context and throws an error
var MY_FAV = 20;
}
// MY_FAV is still 7
console.log('my favorite number is ' + MY_FAV);
// throws an error, missing initializer in const declaration
const FOO;
// const also works on objects
const MY_OBJECT = {'key': 'value'};
// Attempting to overwrite the object throws an error
MY_OBJECT = {'OTHER_KEY': 'value'};
// However, object keys are not protected,
// so the following statement is executed without problem
MY_OBJECT.key = 'otherValue'; // Use Object.freeze() to make object immutable
// The same applies to arrays
const MY_ARRAY = [];
// It's possible to push items into the array
MY_ARRAY.push('A'); // ["A"]
// However, assigning a new array to the variable throws an error
MY_ARRAY = ['B'];
规范
Specification |
Status |
Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Let and Const Declarations' in that specification. |
Standard |
Initial definition. |
ECMAScript Latest Draft (ECMA-262)The definition of 'Let and Const Declarations' in that specification. |
Living Standard |
No changes. |
浏览器兼容性
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 |
? |
10.0 |
Allowed in sloppy mode |
49.0 |
? |
? |
? |
? |
? |
Feature |
Android |
Android Webview |
Edge |
Firefox Mobile (Gecko) |
IE Mobile |
Opera Mobile |
Safari Mobile |
Chrome for Android |
---|---|---|---|---|---|---|---|---|
Basic support |
No support |
(Yes) |
(Yes) |
? |
? |
(Yes) |
? |
(Yes) |
Reassignment fails |
No support |
(Yes) |
(Yes) |
? |
? |
(Yes) |
10.0 |
(Yes) |
Allowed in sloppy mode |
No support |
49.0 |
? |
? |
? |
? |
? |
49.0 |
声明 | Statements相关

JavaScript 是一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的解释型语言。它已经由ECMA(欧洲电脑制造商协会)通过 ECMAScript 实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器( Chrome、IE、FireFox、Safari、Opera )支持。JavaScript 是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持 I/O,比如网络