專案需要了解關於JavaScript物件屬性的所有資訊。
JavaScript物件 擁有屬性,結構是由標籤和數值所組成的。
我們所見到的物件文字語法:
const car = {
}
讓我們能夠像這樣定義屬性:
const car = {
color: '藍色'
}
這裡我們有一個名為car
的物件,擁有一個名為color
,具有數值藍色
的屬性。
標籤可以是任何字串。注意到我在color
周圍沒有使用引號,但是如果我想要在屬性名稱中包含無法當作變數名稱的字元,我必須這樣寫:
const car = {
color: '藍色',
'the color': '藍色'
}
這意味著空格、連字號和其他特殊字元。
就像你看到的,我們用逗號分隔每個屬性。
檢索屬性的數值
我們可以使用2種不同的語法檢索屬性的數值。
第一種是點表示法:
car.color //'藍色'
第二種,適用於具有無效名稱的屬性,是使用方括號:
car['the color'] //'藍色'
如果您存取一個不存在的屬性,您將得到 undefined
:
car.brand //undefined
檢查屬性值但預設為預定義值的一個好方法是使用 ||
運算子:
const brand = car.brand || '福特'
正如前面所述,物件可以擁有嵌套的物件作為屬性:
const car = {
brand: {
name: '福特'
},
color: '藍色'
}
您可以使用以下方法來訪問品牌名:
car.brand.name
或
car['brand']['name']
甚至可以混合使用:
car.brand['name']
car['brand'].name
設定屬性的數值
就像你在上面看到的,您可以在定義物件時設定屬性的數值。
但是您隨時可以稍後更新它:
const car = {
color: '藍色'
}
car.color = '黃色'
car['color'] = '紅色'
您還可以向物件添加新屬性:
car.model = '節慶'
car.model //'節慶'
如何刪除屬性
假設有以下物件:
const car = {
color: '藍色',
brand: '福特'
}
您可以使用以下方法從該物件中刪除屬性:
delete car.brand
如下所示,也可以表示為:
delete car['brand']
delete car.brand
delete newCar['brand']
將屬性設定為undefined
如果您需要以非常優化的方式執行此操作,例如在迴圈中操作大量物件時,另一種選擇是將屬性設置為undefined
。
由於其特性,進行delete
操作的效能比單純將其重新賦值為undefined
要慢很多 ,超過50倍的速度。
然而,請記住,該屬性並未從物件中刪除。它的數值被清除,但若您迭代物件,它仍然存在:
delete
的速度仍然很快,您只需要在有非常好的理由時才應該針對此類效能問題進行檢查,否則建議始終具有更明確的語義和功能。
在不更改物件的情況下刪除屬性
如果不可變性是您關心的問題,您可以通過從舊物件複製所有屬性(除了要刪除的屬性)來創建一個全新的物件:
const car = {
color: '藍色',
brand: '福特'
}
const prop = 'color'
const newCar = Object.keys(car).reduce((object, key) => {
if (key !== prop) {
object[key] = car[key]
}
return object
}, {})
如何計算JavaScript物件中的屬性數量
使用Object.keys()
方法,將要檢查的物件作為參數傳入,以獲取物件的所有(自有)可列舉屬性的陣列。
然後通過檢查 length
屬性計算該陣列的長度:
const car = {
color: '藍色',
brand: '福特',
model: '節慶'
}
Object.keys(car).length
我所說的可列舉屬性,表示其內部的enumerable標誌被設置為true,這是預設的。有關更多信息,請查看MDN。
如何檢查JavaScript物件屬性是否為undefined
在JavaScript程式中,檢查物件屬性是否為undefined的正確方法是使用typeof
運算子。
typeof
返回一個字串,告訴我們操作數的型態。它無需使用括號,只需將任意要檢查的值傳遞給它即可:
const list = []
const count = 2
typeof list //"object"
typeof count //"number"
typeof "test" //"string"
typeof color //"undefined"
如果該值未被定義,typeof
將返回 undefined 這個字串。
現在假設您有一個僅有一個屬性的car
物件:
const car = {
model: '節慶'
}
這是您檢查在該物件上是否已定義color
屬性的方法:
if (typeof car.color === 'undefined') {
// color是undefined
}
動態屬性
在定義屬性時,如果將其標籤包裹在方括號中,則其標籤可以是一個表達式:
const car = {
['c' + 'o' + 'lor']: '藍色'
}
car.color //'藍色'
簡化的語法將變數作為物件的屬性
與其這樣做:
const something = 'y'
const x = {
something: something
}
您可以簡化為:
const something = 'y'
const x = {
something
}