JavaScript 核心觀念(23)-物件-額外補充:變數及物件屬性的差異

前言

接下來說明一下變數與物件屬性的差異性。

差異

首先我們知道當我們宣告一個變數時,會在 window 下新增一個屬性

1
2
var a = 1;
console.log(window.a); // 1

但是這邊有一件很特別的事情就是,如果你直接打 b = 2,你會發現 window 一樣可以找到 b 的存在

1
2
3
4
var a = 1;
console.log(window.a); // 1
b = 2;
console.log(window.b); // 2

你會發現我們 b 並沒有透過宣告的方式建立,但卻會出現在 window 下,而這兩種建立的方式最大差別在於「變數是無法被刪除的」。

舉例來講,我們可以使用 delete 這個方法嘗試刪除物件的屬性

1
2
var a = 1;
delete a; // false

你會發現使用 var 宣告的變數是無法被刪除的,因此若是 b 呢?

1
2
b = 2;
delete b; // true

你可以發現 b 被刪除了,因此會建議變數一定要使用 var 宣告,否則是有很高的機會發生悲劇的,因此在 MDN 文件中也有提到

因此, 建議你一定要宣告你的變數, 不管你要將它使用於全域範圍內或者函數內。
若未宣告變數, 將非常可能導致無法預測的結果。所以, 在 ECMAScript 5 strict mode 中, 若在函數中給一個未經宣告的函數賦值, 將會丟出錯誤。

所以不要鐵齒唷。

參考文獻

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你也可以考慮請我喝一杯咖啡

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ