JavaScript const 关键字

  • JavaScript const 关键字

    ES2015引入了两个重要的新JavaScript关键字:letconst。使用const定义的变量的行为类似于let变量,只是它们不能被重新分配:
    const PI = 3.141592653589793;
    PI = 3.14;      // 这将给出一个错误
    PI = PI + 10;   // 这也会给出一个错误
    尝试一下
  • 块作用域

    声明const变量类似let ,当谈到块作用域。在此示例中,块中声明的x与块外部声明的x不同:
    var x = 10;
    // 这里x是 10
    { 
      const x = 2;
      // 这里x是 2
    }
    // 这里x是 10
    尝试一下
    您可以在前一章中了解有关块作用域的更多信息: JavaScript let 关键字
  • 声明时分配

    const声明时,必须为JavaScript变量赋值:
    不正确:
    const PI;
    PI = 3.14159265359;
    正确:
    const PI;
    const PI = 3.14159265359;
  • 不是真正的常数

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

    如果我们将一个原始值赋给常量,我们就不能改变原始值:
    const PI = 3.141592653589793;
    PI = 3.14;      // 报错
    PI = PI + 10;   // 报错
    尝试一下
  • const对象可以更改

    您可以更改const对象的属性:
    // 您可以创建一个const对象:
    const car = {type:"Fiat", model:"500", color:"white"};
    
    // 您可以更改属性:
    car.color = "red";
    
    // 您可以添加属性:
    car.owner = "Johnson";
    尝试一下
    但是你不能重新分配const对象:
    const car = {type:"Fiat", model:"500", color:"white"};
    car = {type:"Volvo", model:"EX60", color:"red"};    // 错误
    尝试一下
  • const数组可以更改

    您可以更改const数组的元素:
    // 您可以创建一个常量数组:
    const cars = ["Saab", "Volvo", "BMW"];
    
    // 您可以更改元素:
    cars[0] = "Toyota";
    
    // 您可以添加元素:
    cars.push("Audi");
    尝试一下
    但是你不能重新分配const数组:
    const cars = ["Saab", "Volvo", "BMW"];
    cars = ["Toyota", "Volvo", "Audi"];    // 错误
    尝试一下
  • 浏览器支持

    letInternet Explorer 10或更早版本不完全支持const关键字。下表定义了第一个完全支持该关键字的浏览器版本:
    关键字 Internet Explorer Chrome FireFox Safari Opera
    关键字名称
    const IE/Edge 11 Chrome 49 Firefox 36 Safari 10 Opera 36
    开始支持时间 2013,10 2016,3 2015,2 2016,9 2016,3
  • 重新声明

    在程序中的任何位置允许重新声明JavaScript var变量:
    var x = 2;    //  允许
    var x = 3;    //  允许
    x = 4;        //  允许
    不允许在同一范围内或同一块中用const重新声明或重新分配现有var或let变量:
    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;   // 允许
    }
  • 变量提升(Hoisting)

    var定义的变量被提升到顶部(如果您不知道Hoisting(变量提升)是什么,请阅读我们的变量提升章节)。
    您可以在声明变量之前使用变量:
    // 你可以在这里使用carName
    var carName;
    尝试一下
    定义的const变量不会被提升到顶部。在声明const变量之前不能使用它:
    /carName = "Volvo";    // 你不能在这里使用carName
    const carName = "Volvo";