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 讚賞 (拍手)

如果這一篇筆記文章對你有幫助,希望可以求點支持或 牡蠣 鼓勵 (ノД`)・゜・。

Liker 是一個按讚(拍手)的讚賞機制,每一篇文章最多可以按五下(拍手),按讚過程你是完全不用付費的(除非你想要每個月贊助我 :D),你只需要登入帳號就可以開始按讚。
而 Liker 會依據按讚數量分配獎金給創作者,所以如果你願意按個讚我會非常感謝你唷。

Google AD

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