常量声明

🎈引用

 

ES6中里也可以使用const语法进行声明。使用const声明的变量会被认为是常量( constant ),意味着它们的值在被设置完成后就不能再被改变。正因为如此,所有的const变量都需要在声明时进行初始化,示例如下:

 

//有效的常量

const maxItems = 30;

//语法错误:未进行初始化

const username;

 

maxItems变量被初始化了,因此它的const声明能正常起效。而username变量没有被初始化,导致在试图运行这段代码时抛出了错误。

 


🍕对比常量声明与 let 声明

 

常量声明与let声明一样,都是块级声明。这意味着常量在声明它们的语句块外部是无法访问的,并且声明也不会被提升,示例如下:

if (condition){

    const maxItems = 30;

    //其他代码

}

//maxItems在此处无法访问

 

此代码中,常量maxItemsif语句内被声明。maxItems在代码块外部无法被访问,因为该语句已结束执行。

 

let的另一个相似之处,是const声明会在同一作用域(全局或是函数作用域)内定义一个已有变量时会抛出错误,无论是该变量此前是用var声明的,还是用let声明的。例 如以下代码:

  

var message = "Hello!";

let age = 25;

//之前变量已经存在,下面二者都会抛出错误

const message ="World!";

const age = 26;

 

两个const声明都可以单独使用,但在前面添加了varlet声明同变量(或常量)的情况下,二者都会出问题。

 

尽管有上述相似之处,但letconst之间仍然有个必须牢记的重大区别:试图对之前用const声明的常量进行赋值会抛出错误,无论是在严格模式还是非严格模式下:

 

const maxItems = 5;

maxItems = 6;        //    抛出错误,常量一旦声明初始化之后无法再次被赋值,与let和var之间的区别

 

与其他语言的常量类似,maxItems变量不能被再次赋值。然而与其他语言不同,JS的常量 如果是一个对象,它所包含的值是可以被修改的。

 


🎨使用const声明对象

 

const声明会阻止对于变量绑定与变量自身值的修改,这意味着const声明并不会阻止对变量成员的修改。例如:

const person = {                

    name : "Nicholas" 

};

// 工作正常 


person.name = "Greg";

// 抛出错误 

person = {    

    name : "Greg"

};

 

此处person在初始化时被绑定了带有一个属性的对象。修改person.name是可能的,并不会抛出错误,因为该操作只修改了person对象的成员,而没有修改person的绑定值。当代码试图为person对象自身赋值时(这会改变变量绑定),就会导致错误。const在变量上的微妙工作机制容易导致误解,但只需记住:const阻止的是对于变量绑定的修改,而不阻止对成员值的修改。

results matching ""

    No results matching ""