對象就是一組“鍵值對”(key-value)的集合,是一種無序的復(fù)合數(shù)據(jù)集合愚隧。
var obj = {
foo: 'Hello',
bar: 'World'
};
鍵名 又稱為“屬性”(property)
所有鍵名都是字符串兜看,加不加引號都可以共屈,如果鍵名是數(shù)值,會被自動轉(zhuǎn)為字符串今瀑。
★如果鍵名不符合標識名的條件(比如第一個字符為數(shù)字程梦,或者含有空格或運算符),且也不是數(shù)字橘荠,則必須加上引號作烟,否則會報錯。
鍵值 又稱為“方法”
如果屬性的值還是一個對象砾医,就形成了鏈式引用拿撩。
var o1 = {};
var o2 = { bar: 'hello' };
o1.foo = o2;
o1.foo.bar // "hello"
對象o1的屬性foo指向?qū)ο髈2,就可以鏈式引用o2的屬性如蚜。
對象的引用
★如果不同的變量名指向同一個對象压恒,那么它們都是這個對象的引用,也就是說指向同一個內(nèi)存地址错邦。
表達式還是語句探赫?
JavaScript 程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行撬呢。一般情況下伦吠,每一行就是一個語句。
var a = 1 + 3;
語句主要為了進行某種操作魂拦,一般情況下不需要返回值毛仪;
1 + 3叫做表達式,指一個為了得到返回值的計算式芯勘。
表達式為了得到返回值箱靴,一定會返回一個值。凡是 JavaScript 語言中預(yù)期為值的地方荷愕,都可以用表達式衡怀。比如棍矛,賦值語句的等號右邊,預(yù)期是一個值抛杨,因此可以放置各種表達式够委。
無法確定是對象還是代碼塊,一律解釋為代碼塊怖现。
屬性的操作
有兩種方法慨绳,一種是使用點運算符,還有一種是使用方括號運算符真竖。
注意脐雪,如果使用方括號運算符,鍵名必須放在引號里面恢共,否則會被當(dāng)作變量處理战秋。
注意,數(shù)值鍵名不能使用點運算符(因為會被當(dāng)成小數(shù)點)讨韭,只能使用方括號運算符脂信。
★ 增刪改查
查:Object.keys
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']
刪:delete
屬性是否存在:in 運算符
包含就返回true,否則返回false透硝。
一個問題是狰闪,它不能識別哪些屬性是對象自身的,哪些屬性是繼承的濒生。這時埋泵,可以使用對象的hasOwnProperty方法判斷一下。
屬性的遍歷:for...in 循環(huán)
for...in循環(huán)有兩個使用注意點
它遍歷的是對象所有可遍歷(enumerable)的屬性罪治,會跳過不可遍歷的屬性丽声。
它不僅遍歷對象自身的屬性,還遍歷繼承的屬性觉义。
對象都繼承了toString屬性雁社,但是for...in循環(huán)不會遍歷到這個屬性。