《JavaScript權(quán)威指南》閱讀筆記(二)

對(duì)象

創(chuàng)建對(duì)象的方式

  • 對(duì)象直接量: var o = {x:1, y:2, f: function(){...}}
對(duì)象直接量
  • new關(guān)鍵字:new Date(), new Array()
  • Object.create()方法:var o1 = Object.create({x:1,y:2});// o1集成了屬性x和y 子檀; 還可以傳入null來創(chuàng)建一個(gè)沒有原型的對(duì)象镊掖,var o2 = Object.create(null);// o2不集成了任何屬性和方法 ;如果想創(chuàng)建一個(gè)空對(duì)象var o3 = Object.create(Object.prototype);// o3相當(dāng)于{}和new Object()是一個(gè)空對(duì)象 褂痰。

屬性的刪除

delete運(yùn)算符可以刪除對(duì)象的屬性亩进,但它只是斷開屬性與宿主對(duì)象的聯(lián)系,而不會(huì)主動(dòng)去操作屬性中的屬性缩歪。同時(shí)归薛,只能刪除自有屬性,不能刪除繼承屬性。舉例:
a = {p:{x:1}}; b=a.p; delete a.p;執(zhí)行后主籍,b.x的值依然是1 习贫。


檢測(cè)屬性

JavaScript的對(duì)象可以看做是屬性的集合,判斷某個(gè)屬性是否存在于某個(gè)對(duì)象中千元,可以通過in運(yùn)算符苫昌、hasOwnProperty()和propertyIsEnumerable()來檢測(cè),甚至可以通過屬性查詢來實(shí)現(xiàn)幸海。

in運(yùn)算符檢測(cè)自有屬性和繼承屬性

hasOwnProperty檢測(cè)自有屬性

propertyIsEnumerable檢測(cè)可以枚舉的自有屬性

祟身!==運(yùn)算符檢測(cè)
然而,!==可以區(qū)分null 和 undefined;所以有時(shí)不便于區(qū)分var o = {x:undefined}物独,這時(shí)o.x !== undefined返回false袜硫,然而x是o的屬性。

枚舉屬性

可以使用for/in循環(huán)來枚舉挡篓,這個(gè)可以遍歷對(duì)象的自有屬性和繼承屬性婉陷,把屬性名稱賦值給循環(huán)的變量。對(duì)象繼承的內(nèi)置方法不能遍歷官研,但在代碼中對(duì)象添加的屬性是可以枚舉的秽澳。



目前有許多工具可對(duì)Object.prototype進(jìn)行了擴(kuò)展,添加了許多屬性方法阀参,而這些屬性方法是能夠被繼承下來的肝集,在ES5之前這些新添加的方法不可以被定義為不可枚舉,所以回被for/in循環(huán)遍歷出來蛛壳,因此常添加過濾杏瞻,有兩種常見的方式:


屬性getter和setter

對(duì)象的屬性由名字,值和一組特性組成衙荐。在ES5中屬性值可以由兩個(gè)方法代替:getter和setter捞挥,這樣的屬性叫做“存取器屬性”(accessor property),它不同于“數(shù)據(jù)屬性”(data property)忧吟,數(shù)據(jù)屬性只有一個(gè)值砌函。
舉例:


和數(shù)據(jù)屬性一樣,存取器屬性也是可以繼承的:


屬性的特性

我們可以認(rèn)為屬性包含一個(gè)名字和4個(gè)特性溜族。

  • 數(shù)據(jù)屬性4個(gè)特性:它的值value讹俊、可寫性writtable、可枚舉性enumerable和可配置性configurable煌抒。
  • 存取器屬性4個(gè)特性:讀取get仍劈、寫入set、可枚舉性enumerable和可配置性configurable寡壮。
getOwnPropertyDescriptor()只能得到自有屬性

要想設(shè)置屬性的特性贩疙,或者想讓新建屬性具有某些特性讹弯,則需要調(diào)用Object.defineProperty(),傳入要修改的對(duì)象,要?jiǎng)?chuàng)建或修改的屬性的名稱和屬性描述符對(duì)象:





這里面的規(guī)則比較多这溅,違反的話會(huì)拋出類型錯(cuò)誤異常组民。

對(duì)象的三個(gè)屬性

  • 原型屬性prototype,用來實(shí)現(xiàn)繼承悲靴,是在實(shí)例被創(chuàng)建之初就設(shè)置好了的臭胜。在ES5中可以通過isPrototypeOf()來查詢對(duì)象的原型


  • 類屬性:是一個(gè)字符串,用來表示對(duì)象的類型信息对竣。常通過toString()方法來獲取庇楞,不過要封裝一下比較安全




    注意,那些通過自定義構(gòu)造函數(shù)創(chuàng)建的對(duì)象和通過直接量創(chuàng)建的對(duì)象否纬,類屬性均為“Object”。

  • 對(duì)象的可擴(kuò)展性:用以表示是否可以給對(duì)象添加新的屬性蛋褥。所有內(nèi)置對(duì)象和自定義對(duì)象都是可以顯示擴(kuò)展的临燃,宿主對(duì)象的可擴(kuò)展性擇優(yōu)JavaScript引擎決定。
    • Object.esExtensible():判斷對(duì)象是否可擴(kuò)展烙心。
    • Object.preventExtensions():將對(duì)象轉(zhuǎn)換為不可擴(kuò)展膜廊,一旦轉(zhuǎn)換將不可逆,及無法再轉(zhuǎn)換為可擴(kuò)展了淫茵。這個(gè)方法只影響對(duì)象本身爪瓜,在對(duì)它的原型添加新屬性時(shí),它也可以繼承獲取這個(gè)新添加的屬性匙瘪。
    • Object.steal():除了將對(duì)象設(shè)置為不可擴(kuò)展铆铆,還能將對(duì)象所有自有屬性設(shè)置為不可配置。
    • Object.freeze()

序列化對(duì)象

指講對(duì)象轉(zhuǎn)換為字符串丹喻,也可以將字符串還原為對(duì)象薄货。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碍论,隨后出現(xiàn)的幾起案子谅猾,更是在濱河造成了極大的恐慌,老刑警劉巖鳍悠,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件税娜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡藏研,警方通過查閱死者的電腦和手機(jī)敬矩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遥倦,“玉大人谤绳,你說我怎么就攤上這事占锯。” “怎么了缩筛?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵消略,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我瞎抛,道長(zhǎng)艺演,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任桐臊,我火速辦了婚禮胎撤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘断凶。我一直安慰自己伤提,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布认烁。 她就那樣靜靜地躺著肿男,像睡著了一般。 火紅的嫁衣襯著肌膚如雪却嗡。 梳的紋絲不亂的頭發(fā)上舶沛,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音窗价,去河邊找鬼如庭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撼港,可吹牛的內(nèi)容都是我干的坪它。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼餐胀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼哟楷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起否灾,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤卖擅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后墨技,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惩阶,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年扣汪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了断楷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崭别,死狀恐怖冬筒,靈堂內(nèi)的尸體忽然破棺而出恐锣,到底是詐尸還是另有隱情,我是刑警寧澤舞痰,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布土榴,位于F島的核電站,受9級(jí)特大地震影響响牛,放射性物質(zhì)發(fā)生泄漏玷禽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一呀打、第九天 我趴在偏房一處隱蔽的房頂上張望矢赁。 院中可真熱鬧,春花似錦贬丛、人聲如沸撩银。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜒蕾。三九已至,卻和暖如春焕阿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背首启。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工暮屡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毅桃。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓褒纲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钥飞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莺掠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 第六章:對(duì)象 2017.02.24 對(duì)象 對(duì)象是JavaScript的基本數(shù)據(jù)類型办素。對(duì)象是一種復(fù)合值战秋。對(duì)象可以看做...
    靜候那一米陽光閱讀 343評(píng)論 0 1
  • 序 從最近的js入門系列的閱讀量逐步遞減,觀眾老爺?shù)呐d趣也不再能夠接受一些細(xì)節(jié)性的地方深度挖掘蛇耀,讓我有了一些思考结闸。...
    zhaolion閱讀 1,581評(píng)論 5 19
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理唇兑,服務(wù)發(fā)現(xiàn),斷路器桦锄,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 與C++扎附、Java等強(qiáng)類型面向?qū)ο蟮木幊陶Z言不同,JavaScript對(duì)象是動(dòng)態(tài)的——可以新增屬性也可以刪除屬性结耀,...
    lidroid本人閱讀 316評(píng)論 1 1
  • 熱氣騰騰的話說留夜, 言辭犀利的辯論匙铡。 陽春白雪的碎念, 林海茫茫的視野碍粥。 走下去鳖眼, 不問路。 聽得見即纲, 有你在具帮。 停...
    阿俊xi閱讀 151評(píng)論 0 0