Const ใน JavaScript

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

ทดสอบด้วยตัวเอง

ในบทก่อนหน้านี้ Let ใน JavaScript ในช่วงเรียนเรื่องบล็อคสโครป

ในตอนประกาศ

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 关键词的浏览器版本:

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;        // อนุญาต

在同一作用域或块中,不允许将已有的 varlet 变量重新声明或重新赋值给 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;

ทดสอบด้วยตัวเอง

ผ่าน const ตัวแปรที่ถูกประกาศจะไม่ถูกนำขึ้นมายังด้านบน

const ตัวแปรไม่สามารถใช้ก่อนการประกาศ

ตัวอย่าง

carName = "Volvo";    // คุณไม่สามารถใช้ carName ที่นี่ได้
const carName = "Volvo";