JavaScript Const

ECMAScript 2015

ES2015 引入了两个重要的 JavaScript 新关键词:let 和 const。
通过 const 定义的变量与 let 变量类似,但不能重新赋值

const PI = 3.141592653589793;
PI = 3.14;      // 会出错
PI = PI + 10;   // 也会出错
块作用域

在块作用域内使用 const 声明的变量与 let 变量相似。
在本例中,x 在块中声明,不同于在块之外声明的 x:

var x = 10;
// 此处,x 为 10
{ 
  const x = 6;
  // 此处,x 为 6
}
// 此处,x 为 10
在声明时赋值

JavaScript const 变量必须在声明时赋值:
不正确

const PI;
PI = 3.14159265359;

正确

const PI = 3.14159265359;
不是真正的常数

关键字 const 有一定的误导性。
它没有定义常量值。它定义了对值的常量引用。
因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。

原始值

如果我们将一个原始值赋给常量,我们就不能改变原始值:

const PI = 3.141592653589793;
PI = 3.14;      // 会出错
PI = PI + 10;   // 也会出错
常量对象可以更改

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

// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
但是您无法重新为常量对象赋值:
const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"};    // ERROR
常量数组可以更改

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

// 您可以创建常量数组:
const cars = ["Audi", "BMW", "porsche"];
// 您可以更改元素:
cars[0] = "Honda";
// 您可以添加元素:
cars.push("Volvo");

但是您无法重新为常量数组赋值:

const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"];    // ERROR
浏览器支持

Internet Explorer 10 或更早版本不支持 const 关键词。
下表定义了第一个完全支持 const 关键词的浏览器版本:
在这里插入图片描述

重新声明

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

var x = 2;    //  允许
var x = 3;    //  允许
x = 4;        //  允许

在同一作用域或块中,不允许将已有的 var 或 let 变量重新声明或重新赋值给 const:

var x = 2;         // 允许
const x = 2;       // 不允许
{
  let x = 2;     // 允许
  const x = 2;   // 不允许
}

在同一作用域或块中,为已有的 const 变量重新声明或赋值是不允许的:

const x = 2;       // 允许
const x = 3;       // 不允许
x = 3;             // 不允许
var x = 3;         // 不允许
let x = 3;         // 不允许
{
  const x = 2;   // 允许
  const x = 3;   // 不允许
  x = 3;         // 不允许
  var x = 3;     // 不允许
  let x = 3;     // 不允许
}

在另外的作用域或块中重新声明 const 是允许的

const x = 2;       // 允许
{
  const x = 3;   // 允许
}
{
  const x = 4;   // 允许
}
提升

通过 var 定义的变量会被提升到顶端。
您可以在声明 var 变量之前就使用它

carName = "Volvo";    // 您可以在此处使用 carName
var carName;

通过 const 定义的变量不会被提升到顶端。
const 变量不能在声明之前使用

carName = "Volvo";    // 您不可以在此处使用 carName
const carName = "Volvo";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值