es6 const關鍵字


 const是constant(常量)的縮寫,const和 let一樣,也是用來聲明變量的,但是const是專門用於聲明一個常量的,顧名思義,常量的值是不可改變的。以前用var聲明的變量,想怎么改就怎么改,同一個變量,后面的值可以輕松覆蓋原來的值,這次const聲明的變量,可由不得我們這么任性地想改就改了。

1.不可修改

const Name = '張三';
Name = '李四';//錯誤,企圖修改常量Name

2.只在塊級作用域起作用,這點與let關鍵字一樣。

    if(1){
       const Name = '張三';
     }
    alert(Name);//錯誤,在代碼塊{ }外,Name失效

3.不存在變量提升,必須先聲明后使用,這點也跟let關鍵字一樣。

    if(1){
        alert(Name);//錯誤,使用前未聲明
        const Name = '張三';
    }

4.不可重復聲明同一個變量,這點跟let也一樣。

    var Name  = '張三';
    const  Name = '李四';//錯誤,聲明一個已經存在的變量Name

5.聲明后必須要賦值

const NAME; //錯誤,只聲明不賦值

如果常量是一個對象呢?來看下面的代碼

    const Person = {"name":"張三"};
    Person.name = "李四";
    Person.age = 20;
    console.log(Person);
    //結果:正常輸出{name: "李四", age: 20}

怎么常量Person好像被修改了,name改成了“李四”,而且還添加了age屬性,值為20;怎么沒有報錯,還正常輸出?

這主要是因為傳址賦值

在賦值過程中,我們可以分為傳值賦值和傳址賦值。這里我們用到了傳址賦值,什么叫傳址賦值?

傳址:在賦值過程中,變量實際上存儲的是數據的地址(對數據的引用),而不是原始數據或者數據的拷貝。

    var student1 = {"name":"張三"};
    var student2 = student1;
    student2.name = "李四";
    console.log(student1);
    //結果:輸出 {name: "李四"}
    console.log(student2);
    //結果:輸出 {name: "李四"}

但是,如果這樣寫呢,就會報錯:

    const Person = {"name":"張三"};
    Person.age = 20;
    Person = {}; 
    //錯誤,企圖給常量Person賦新值(新地址)

總結:const也是用於聲明一個常量,並必須賦值,聲明后不可修改,跟let一樣,只在塊級作用域起作用,不可重復聲明同一個變量,不會變量提升,聲明引用類型的常量時,要注意是傳址賦值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM