二维码

JavaScript常量

JavaScript常量

该关键字在[ES6 (2015)] const中引入

用 定义的变量const不能被重新声明

用 定义的变量const不能被重新赋值

const使用块作用域定义的变量

无法重新分配

变量const不能被重新赋值:

1
2
3
const PI = 3.141592653589793;  
PI = 3.14;      // This will give an error
PI = PI + 10;   // This will also give an error


必须分配

JavaScriptconst变量在声明时必须赋值:

:正确的
1
const PI = 3.14159265359;  
:不正确
1
2
const PI;  
PI = 3.14159265359;

什么时候使用 JavaScript const?

const当您知道不应更改值时,请始终声明变量。

const声明时使用:

  • 一个新的数组
  • 一个新对象
  • 一个新功能
  • 一个新的正则表达式

常量对象和数组

该关键字const有点误导。

它没有定义常量值。它定义了对值的常量引用。

因此,您不能:

  • 重新分配一个常量值
  • 重新分配常量数组
  • 重新分配常量对象

但是你可以:

  • 更改常量数组的元素
  • 改变常量对象的属性

常量数组

您可以更改常量数组的元素:

1
2
3
4
5
6
7
8
// You can create a constant array:  
const cars = ["Saab", "Volvo", "BMW"];

// You can change an element:
cars[0] = "Toyota";

// You can add an element:
cars.push("Audi");

但你不能重新分配数组:

1
2
3
const cars = ["Saab", "Volvo", "BMW"];  

cars = ["Toyota", "Volvo", "Audi"];    // ERROR


常量对象

您可以更改常量对象的属性:

1
2
3
4
5
6
7
8
// You can create a const object:  
const car = {type:"Fiat", model:"500", color:"white"};

// You can change a property:
car.color = "red";

// You can add a property:
car.owner = "Johnson";

但你不能重新分配对象:

1
2
3
const car = {type:"Fiat", model:"500", color:"white"};  

car = {type:"Volvo", model:"EX60", color:"red"};    // ERROR

var、let 和 const 之间的区别

范围 重述 重新分配 吊装 绑定这个
var No Yes Yes yes Yes
let Yes No Yes No No
const Yes No No No No

什么是好的?

let并且const 具有块作用域

let并且const 不能重新申报

let并且const 必须在使用前声明

let并且const 不绑定this.

let并且不const 被吊装

什么是不好?

var不必声明。

var被吊起。

var与此相关。


浏览器支持

Internet Explorer 11 或更早版本不支持let和关键字。const

下表定义了完全支持的第一个浏览器版本:

Chrome 49 Edge 12 Firefox 36 Safari 11 Opera 36
Mar, 2016 Jul, 2015 Jan, 2015 Sep, 2017 Mar, 2016

块范围

块作用域中,使用 const 声明变量与 let 类似。

在本例中,块中声明的 x 与块外声明的 x 不同:

1
2
3
4
5
6
7
8
9
const x = 10;  
// Here x is 10

{
const x = 2;
// Here x is 2
}

// Here x is 10


重新申报

var程序中的任何位置都允许重新声明 JavaScript变量:

1
2
3
var x = 2;     // Allowed  
var x = 3;     // Allowed
x = 4;         // Allowed

不允许在同一范围内将现有的varlet 变量重新声明为const

1
2
3
4
5
6
7
8
9
10
11
12
var x = 2;     // Allowed  
const x = 2;   // Not allowed

{
let x = 2;     // Allowed
const x = 2;   // Not allowed
}

{
const x = 2;   // Allowed
const x = 2;   // Not allowed
}

const不允许在同一范围内重新分配现有变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
const x = 2;     // Allowed  
x = 2;           // Not allowed
var x = 2;       // Not allowed
let x = 2;       // Not allowed
const x = 2;     // Not allowed

{
  const x = 2;   // Allowed
  x = 2;         // Not allowed
  var x = 2;     // Not allowed
  let x = 2;     // Not allowed
  const x = 2;   // Not allowed
}

const允许在另一个作用域或另一个块中使用 ,重新声明变量:

1
2
3
4
5
6
7
8
9
const x = 2;       // Allowed  

{
  const x = 3;   // Allowed
}

{
  const x = 4;   // Allowed
}

吊装

用定义的变量var提升到顶部并且可以随时初始化。

含义:您可以在声明变量之前使用该变量:

还行吧:

1
2
carName = "Volvo";  
var carName;

用定义的变量const也会被提升到顶部,但不会被初始化。

含义:const在声明变量之前使用变量将导致 ReferenceError

1
2
alert (carName);  
const carName = "Volvo";