JS 趴趴走 - ES6 關於 const 的宣告

前言

今天的文章啟發於六角學院的Js學徒特訓班第三十七關,除了var宣告變數之外,我們也可以使用ES6的letconst

let和const宣告

首先了解let和const都屬於用來宣告的,他們兩者最大差異是

  • let: 用來宣告變數,可以被重新指定值
  • const: 用來宣告常數(變數),不能重新指定值

所以當我們宣告的時候,就會寫成這樣

1
2
3
4
let a='曉華';
const b='小鎮';
a='小明';
b='aaa';//Assignment to constant variable.

使用const宣告就不能改值了,會發生錯誤

const宣告物件和陣列

當你要宣告會改變值的時,下意識會認為那就使用let,這次我們使用const宣告物件和陣列試試看

1
2
const arr=[];
arr.push(123);

會發現竟然沒出錯,這是因為JS中的陣列和物件都是屬於 Pass by reference,也就是我們所說的傳址,以上述範例來說它只是把數值放在同一個記憶體的位置,沒有指向其他地方,自然就不會產生錯誤了

這點物件也是同樣的

1
2
3
4
5
6
7
const obj={
a:'小名',
b:'曉華',
c:'小鎮'
};
obj.a='名小小'
console.log(obj) //{a: "名小小", b: "曉華", c: "小鎮"}

但要記住,一旦跟改位置,就不能使用const方式宣告了

1
2
3
4
5
6
7
8
const obj2={
a:'小名',
b:'曉華',
c:'小鎮'
};
obj2={
a:'名小小'
}//Assignment to constant variable.

最後放個範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const name = '小名';
const age = 16;
let city = '台北市';
const person = {
name: '曉華',
height: 155
}
let myWallet = {
money: 1000
}

city = '台中市';
person.height = 160;
myWallet = {};

可以看出來,用const宣告的值為不可更改,若使用物件更改為同一個記憶體位置可以使用const,若重新指向新的記憶體則依然使用let


參考文獻

對於 Pass by reference 可以參考以下文章

重新認識 JavaScript: Day 05 JavaScript 是「傳值」或「傳址」?
談談 JavaScript 中 by reference 和 by value 的重要觀念