JavaScript 的對(duì)象是一種無序的集合數(shù)據(jù)類型荣瑟,它由若干鍵值對(duì)組成摩泪。
JavaScript 的對(duì)象用于描述現(xiàn)實(shí)世界中的某個(gè)對(duì)象劫谅。例如,為了描述“小明”這個(gè)淘氣的小朋友荞驴,我們可以用若干鍵值對(duì)來描述他:
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
JavaScript 用一個(gè) {...}
表示一個(gè)對(duì)象熊楼。
鍵值對(duì)以 xxx: xxx
形式申明,用 ,
隔開鲫骗。
最后一個(gè)鍵值對(duì)不需要在末尾加 ,
,如果加了枕磁,有的瀏覽器(如低版本的 IE)將報(bào)錯(cuò)术吝。
1.獲取對(duì)象屬性
上述對(duì)象申明了一個(gè) name
屬性,值是 '小明'
沦寂,birth
屬性,值是 1990
传藏,以及其他一些屬性漩氨。最后遗增,把這個(gè)對(duì)象賦值給變量 xiaoming
后,就可以通過變量 xiaoming
來獲取小明的屬性了:
xiaoming.name; // '小明'
xiaoming.birth; // 1990
如果屬性名包含特殊字符做修,不是一個(gè)有效的變量名,就必須用 ' '
括起來:
var xiaohong = {
name: '小紅',
'middle-school': 'No.1 Middle School'
};
xiaohong
的屬性名 middle-school
不是一個(gè)有效的變量饰及,就需要用 ' '
括起來。訪問這個(gè)屬性也無法使用 .
操作符宾濒,必須用 ['xxx']
來訪問:
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小紅'
xiaohong.name; // '小紅'
也可以用 xiaohong['name']
來訪問 xiaohong
的 name
屬性绘梦,不過xiaohong.name
的寫法更簡(jiǎn)潔。我們?cè)诰帉?JavaScript 代碼的時(shí)候卸奉,屬性名盡量使用標(biāo)準(zhǔn)的變量名颖御,這樣就可以直接通過 object.prop
的形式訪問一個(gè)屬性了。
如果訪問一個(gè)不存在的屬性拧略,javascript 不會(huì)報(bào)錯(cuò),而是返回 undefined
:
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
2.添加 / 刪除屬性
由于 JavaScript 的對(duì)象是動(dòng)態(tài)類型辑鲤,你可以自由地給一個(gè)對(duì)象添加或刪除屬性:
var xiaoming = {
name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一個(gè) age 屬性
xiaoming.age; // 18
delete xiaoming.age; // 刪除 age 屬性
xiaoming.age; // undefined
delete xiaoming['name']; // 刪除 name 屬性
xiaoming.name; // undefined
delete xiaoming.school; // 刪除一個(gè)不存在的 school 屬性也不會(huì)報(bào)錯(cuò)
3.檢查對(duì)象屬性
如果我們要檢測(cè) xiaoming
是否擁有某一屬性月褥,可以用 in
操作符:
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false
不過要小心宁赤,如果 in
判斷一個(gè)屬性存在栓票,這個(gè)屬性不一定是 xiaoming 的,它可能是 xiaoming 繼承得到的:
'toString' in xiaoming; // true
因?yàn)?toString
定義在 object 對(duì)象中走贪,而所有對(duì)象最終都會(huì)在原型鏈上指向 object坠狡,所以 xiaoming 也擁有 toString
屬性。
要判斷一個(gè)屬性是否是 xiaoming 自身擁有的婴渡,而不是繼承得到的,可以用 hasOwnProperty()
方法:
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false