const是constant(常量)的縮寫,const和 let同樣,也是用來聲明變量的,可是const是專門用於聲明一個常量的,顧名思義,常量的值是不可改變的。之前用var聲明的變量,想怎麼改就怎麼改,同一個變量,後面的值能夠輕鬆覆蓋原來的值,此次const聲明的變量,可由不得咱們這麼任性地想改就改了。spa
1.不可修改code
const Name = '張三'; Name = '李四';//錯誤,企圖修改常量Name
2.只在塊級做用域起做用,這點與let關鍵字同樣。對象
if(1){ const Name = '張三'; } alert(Name);//錯誤,在代碼塊{ }外,Name失效
3.不存在變量提高,必須先聲明後使用,這點也跟let關鍵字同樣。blog
if(1){ alert(Name);//錯誤,使用前未聲明 const Name = '張三'; }
4.不可重複聲明同一個變量,這點跟let也同樣。作用域
var Name = '張三'; const Name = '李四';//錯誤,聲明一個已經存在的變量Name
5.聲明後必需要賦值console
const NAME; //錯誤,只聲明不賦值
若是常量是一個對象呢?來看下面的代碼class
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同樣,只在塊級做用域起做用,不可重複聲明同一個變量,不會變量提高,聲明引用類型的常量時,要注意是傳址賦值。