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 中, 若在函數中給一個未經宣告的函數賦值, 將會丟出錯誤。

所以不要鐵齒唷。

參考文獻

0%