而 let 和 const 如果離開了宣告的區域 { }
,變數就不存在。
可重新賦予值,也可重複宣告
var z = 10;
var z = 30000;
console.log(z); // 30000
宣告變數後,可重新賦予值,且前面不用再加 let (因為已宣告過),只須給等號重新賦予值
let a=20;
a=40;
console.log(a); // 40
不可重新賦予值
const b=1;
console.log(b);
b=3; // 會報錯,因為 const 的值不可被修改
const obj = {
mail:'abc123456@gmail.com'
};
obj.mail = 'abcdefg@gmail.com'
console.log(obj.mail) // abcdefg@gmail.com
Object.freeze()
const obj = {
mail:'abc123456@gmail.com'
};
Object.freeze(obj) // 凍結物件後,其內容就不能被修改
obj.mail = 'abcdefg@gmail.com'
console.log(obj.mail) // abc123456@gmail.com
凍結後,改變值不會有任何效果
最後用程式碼來比較一下三者的差異:
var x;
console.log(x); // undefined
let y;
console.log(y); // undefined
const z;
console.log(z); // Uncaught SyntaxError: Missing initializer in const declaration
var x = 10;
var x = 20;
console.log(x); // 20
let y = 10;
let y = 20;
console.log(y); // Uncaught SyntaxError: Identifier 'x' has already been declared
const z = 10;
const z = 20;
console.log(z); // Uncaught SyntaxError: Identifier 'y' has already been declared
var x = 10;
x = 20;
console.log(x); // 20
let y = 10;
y = 20;
console.log(y); // 20
const z = 10;
z = 20;
console.log(z); // Uncaught TypeError: Assignment to constant variable.
總結一下~
固定不變的東西,變數用 const 宣告,會改變的用 let,沒事別用 var。