JavaScript 核心觀念(23)-物件-額外補充:變數及物件屬性的差異
前言
接下來說明一下變數與物件屬性的差異性。
差異
首先我們知道當我們宣告一個變數時,會在 window 下新增一個屬性
1 | var a = 1; |
但是這邊有一件很特別的事情就是,如果你直接打 b = 2
,你會發現 window
一樣可以找到 b
的存在
1 | var a = 1; |
你會發現我們 b
並沒有透過宣告的方式建立,但卻會出現在 window
下,而這兩種建立的方式最大差別在於「變數是無法被刪除的」。
舉例來講,我們可以使用 delete
這個方法嘗試刪除物件的屬性
1 | var a = 1; |
你會發現使用 var
宣告的變數是無法被刪除的,因此若是 b
呢?
1 | b = 2; |
你可以發現 b
被刪除了,因此會建議變數一定要使用 var
宣告,否則是有很高的機會發生悲劇的,因此在 MDN 文件中也有提到
因此, 建議你一定要宣告你的變數, 不管你要將它使用於全域範圍內或者函數內。
若未宣告變數, 將非常可能導致無法預測的結果。所以, 在 ECMAScript 5 strict mode 中, 若在函數中給一個未經宣告的函數賦值, 將會丟出錯誤。
所以不要鐵齒唷。