物件與純值
在 JavaScript 當中,純值是無法新增屬性的,只有物件型別可以新增屬性。
1 | var newString = '小明家'; |
因純值無法新增屬性,所以 newString 還是會維持本來的字串,不會做任何的修改。
現在我們來看第二個範例
1 | var newString = new String('小明家'); |
會顯示如下 ↓
因為包裹物件本來就會讓值轉為物件,所以 newString 自然就變為物件型別了,物件型別當然就能夠新增屬性啦!
再來我們看到陣列的範例
1 | var newArray = [1, 2, 3]; |
會顯示如下 ↓
這樣應該就很清楚為什麼陣列可以新增屬性了吧!
最後讓我們看看 function(函式) 的範例
1 | function callName() { |
這邊在 typeof 會出現 function 是因為函式其實算是物件型別下的一個子型別,所以 function 算是物件型別。
接下來我們設定屬性看看 ↓
1 | function callName() { |
console.dir
是能夠在 console 裡面展開函式的一個作法。
這邊會發現為什麼 callName.name = '小明';
沒有作用,因為函式本身的 name 是無法被修改的,這邊的 name 其實就是函式本身的名稱。
1 | function callName() { |
所以如果不是設定 name 為屬性的話,就可以順利的新增一個屬性了。 如下 ↓