JavaScript Const 用法详解 【ECMAScript 2015】
JavaScript Const
ECMAScript 2015
ES2015 引入了两个重要的 JavaScript 新关键词:let
和 const
。
通过 const
定义的变量与 let
变量类似,但不能重新赋值:
示例代码:
const PI = 3.141592653589793;
PI = 3.14; // 会出错
PI = PI + 10; // 也会出错
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>您无法更改原始值。</p>
<p id="demo"></p>
<script>
try {
const PI = 3.141592653589793;
PI = 3.14;
}
catch (err) {
document.getElementById("demo").innerHTML = err;
}
</script>
</body>
</html>
运行结果:
Javascript const 您无法更改原始值。 TypeError: Assignment to constant variable.
块作用域
在块作用域内使用 const
声明的变量与 let
变量相似。
在本例中,x 在块中声明,不同于在块之外声明的 x:
示例代码:
var x = 10;
// 此处,x 为 10
{
const x = 6;
// 此处,x 为 6
}
// 此处,x 为 10
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>使用 const 声明变量</h2>
<p id="demo"></p>
<script>
var x = 10;
// 此处 x 是 10
{
const x = 2;
// 此处 x 是 2
}
// 此处 x 是 10
document.getElementById("demo").innerHTML = x;
</script>
</body>
</html>
运行结果:
使用 const 声明变量 10
您可以在上一章 JavaScript Let 中学到更多有关块作用域的知识。
在声明时赋值
JavaScript const
变量必须在声明时赋值:
不正确
const PI;
PI = 3.14159265359;
正确
const PI = 3.14159265359;
不是真正的常数
关键字 const
有一定的误导性。
它没有定义常量值。它定义了对值的常量引用。
因此,我们不能更改常量原始值,但我们可以更改常量对象的属性。
原始值
如果我们将一个原始值赋给常量,我们就不能改变原始值:
示例代码:
const PI = 3.141592653589793;
PI = 3.14; // 会出错
PI = PI + 10; // 也会出错
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>您无法更改原始值。</p>
<p id="demo"></p>
<script>
try {
const PI = 3.141592653589793;
PI = 3.14;
}
catch (err) {
document.getElementById("demo").innerHTML = err;
}
</script>
</body>
</html>
运行结果:
Javascript const 您无法更改原始值。 TypeError: Assignment to constant variable.
常量对象可以更改
您可以更改常量对象的属性:
示例代码:
// 您可以创建 const 对象:
const car = {type:"porsche", model:"911", color:"Black"};
// 您可以更改属性:
car.color = "White";
// 您可以添加属性:
car.owner = "Bill";
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>声明常量对象不会使对象属性不可更改:</p>
<p id="demo"></p>
<script>
// 创建对象:
const car = {type:"Porsche", model:"911", color:"white"};
// 更改属性:
car.color = "red";
// 添加属性:
car.owner = "Steve";
// 显示属性:
document.getElementById("demo").innerHTML = "车主是:" + car.owner;
</script>
</body>
</html>
运行结果:
Javascript const 声明常量对象不会使对象属性不可更改: 车主是:Steve
但是您无法重新为常量对象赋值:
示例代码:
const car = {type:"porsche", model:"911", color:"Black"};
car = {type:"Volvo", model:"XC60", color:"White"}; // ERROR
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>但是你不能重新赋值一个常量对象:</p>
<p id="demo"></p>
<script>
try {
const car = {type:"Porsche", model:"911", color:"white"};
car = {type:"BMW", model:"M5", color:"red"};
}
catch (err) {
document.getElementById("demo").innerHTML = err;
}
</script>
</body>
</html>
运行结果:
Javascript const 但是你不能重新赋值一个常量对象: TypeError: Assignment to constant variable.
常量数组可以更改
您可以更改常量数组的元素:
示例代码:
// 您可以创建常量数组:
const cars = ["Audi", "BMW", "porsche"];
// 您可以更改元素:
cars[0] = "Honda";
// 您可以添加元素:
cars.push("Volvo");
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>声明常量数组不会使元素不可更改:</p>
<p id="demo"></p>
<script>
// 创建数组:
const cars = ["Audi", "BMW", "Porsche"];
// 更改元素:
cars[0] = "Toyota";
// 添加元素:
cars.push("Honda");
// 显示数组:
document.getElementById("demo").innerHTML = cars;
</script>
</body>
</html>
运行结果:
Javascript const 声明常量数组不会使元素不可更改: Toyota,BMW,Porsche,Honda
但是您无法重新为常量数组赋值:
示例代码:
const cars = ["Audi", "BMW", "porsche"];
cars = ["Honda", "Toyota", "Volvo"]; // ERROR
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript const</h2>
<p>您无法重新赋值常量数组:</p>
<p id="demo"></p>
<script>
try {
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"];
}
catch (err) {
document.getElementById("demo").innerHTML = err;
}
</script>
</body>
</html>
运行结果:
Javascript const 您无法重新赋值常量数组: TypeError: Assignment to constant variable.
浏览器支持
Internet Explorer 10 或更早版本不支持 const
关键词。
下表定义了第一个完全支持 const 关键词的浏览器版本:
Chrome | IE | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 49 | IE / Edge 11 | Firefox 36 | Safari 10 | Opera 36 |
2016 年 3 月 | 2013 年 10 月 | 2015 年 2 月 | 2016 年 9 月 | 2016 年 3 月 |
重新声明
在程序中的任何位置都允许重新声明 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
定义的变量会被提升到顶端。如果您不了解什么是提升(Hoisting),请学习提升这一章。
您可以在声明 var 变量之前就使用它:
示例代码:
carName = "Volvo"; // 您可以在此处使用 carName
var carName;
完整实例:
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript 提升</h2>
<p>使用 <b>var</b>,您可以在声明变量之前使用它:</p>
<p id="demo"></p>
<script>
carName = "Audi";
document.getElementById("demo").innerHTML = carName;
var carName;
</script>
</body>
</html>
运行结果:
Javascript 提升 使用 var,您可以在声明变量之前使用它: Audi
通过 const
定义的变量不会被提升到顶端。
const
变量不能在声明之前使用:
示例代码:
carName = "Volvo"; // 您不可以在此处使用 carName
const carName = "Volvo";
可以使用本站在线JavaScript测试工具测试上述代码运行效果:http://www.phpcodeweb.com/runjs.html