<JS>學習筆記(Object)

新人學習JS的日記腐缤。

歡迎各位朋友糾錯椒惨!

以下內容都在谷歌瀏覽器進行測試可用
一些方法是ES6的,要用babel轉碼才能用(不過最新版本谷歌瀏覽器已經(jīng)支持90%的ES6語法了,基本都可以使用).

>>語法
let a = 'str' , b = function(){} , obj = {};
字面量語法
1: obj = {  //直接設置屬性,方法
    a: 'str',
    b: function(){}
} 
2: obj = {  
    a: a,
    b: b
}
3: obj = { //ES6
    a, //可以將變量,直接設置為屬性. 
    b,
    func(arg){}, //方法可以不寫'function'關鍵字,直接寫 函數(shù)名(){};
    ['test' + a]: b //可以將寫動態(tài)屬性名,
    get property(){}, // 直接設置geter,setter方法.
    set property(val){}, 
}

用Object構造函數(shù)
obj = new Object([val])
1: 不寫參數(shù)或 val為null,undefined, 返回一個空對象
2: val是什么類型,返回什么類型對象.
>>靜態(tài)方法

① 創(chuàng)建對象

>> Object.assign(target, ...sources) -- 將所有源對象的可枚舉屬性,復制到目標對象.
1: target: 必填object類型的值. 
2: ...sources: (多個)源對象.
3: 拷貝規(guī)則: 調用sources的[[GET]]方法 , target的[[SET]]方法 , 更像 直接賦值 而不是 復制值.  基本類型會轉換封裝類型.
4: 只拷貝sources本身的<可枚舉>的屬性,其原型鏈上的不拷貝. 
5: 若target有相同的屬性(非只讀屬性),會被后來的sources的屬性覆蓋. 若屬性是只讀屬性,報錯.
6: sources為null,undefined 跳過,進行下一個.
7: 注意:拷貝為淺拷貝. 也就是說:若sources的屬性有object類型,只會復制其引用. 而不是復制一個object.
8: 返回target對象.

>> Object.create(proto, [ propertiesObject ]) -- 用原型對象(和配置屬性),創(chuàng)建一個新對象.
1: proto:一個對象,作為新對象的原型.
2: propertiesObject: 給新對象設置屬性,和具體內部配置.例如:
   { //具體看 Object.defineProperty()
    'attrName' : {
        value:'attrVal',
        writable: true ,
        set:function(val){}
    }
3: proto不是null或則對象,則報錯.
4: proto是null的時候,會返回一個沒有原型的對象,也就是說該對象沒有任何屬性,方法可以調用,全部都得自己定義.
4: 返回新對象

② 遍歷對象

>> Object.keys(obj) -- 查看對象的可枚舉屬性.
1: 要查看其枚舉屬性的對象.
2: 返回對象的可枚舉屬性的字符串數(shù)組.
3: 值在數(shù)組中的排列順序與for...in遍歷順序一致(區(qū)別在于for...in也會枚舉原型鏈中的屬性).
4: 例: Object.keys( {a:1,b:2} ) // ["a", "b"]

>> Object.values() -- 查看對象的可枚舉屬性的值.(ES7規(guī)范提案中,謹慎使用)
1: 要查看其枚舉屬性的對象.
2: 返回對象的可枚舉屬性的值的數(shù)組.
3: 值在數(shù)組中的排列順序與for...in遍歷順序一致(區(qū)別在于for...in也會枚舉原型鏈中的屬性).
4: 例:Object.values({a:1,b:2}) // [1,2]

>> Object.entries(obj) -- 查看對象的鍵值對(可枚舉的).
1: obj: 要查看的對象.
2: 返回由 [key, value](可枚舉的) 組成的數(shù)組.
3: 鍵值對在數(shù)組中的排列順序與for...in遍歷順序一致(區(qū)別在于for...in也會枚舉原型鏈中的屬性).
4: 例: let o = {a:1,b:2};   Object.entries(o) // [ ["a", 1], ["b", 2] ]

③ 比較,原型

>>Object.is(val1, val2) -- 判斷是否為相同值.
1: 比較不進行類型轉換.
2: 基本與 === 情況相同,區(qū)別如下:
   NaN與NaN,返回true.
   +0與-0,返回false.
   -0與-0,返回true.
   +0與+0,返回true,
3: 除非必要情況,否則不要使用此方法,因為性能不如 ===

>> Object.getPrototypeOf(obj) -- 獲取對象原型
1: obj:要返回其原型的對象.
2: 返回其原型,如果沒有則返回null.

>> Object.setPrototypeOf(obj, prototype)
1: obj:要設置其原型的對象. prototype:新原型(對象或null)
2: 不推薦使用此方法,可能會影響其它代碼,性能也是問題. 應該使用Object.create()創(chuàng)建對應原型的對象.
3: 若對象是不可拓展的,會報錯.

④ 對象屬性
屬性描述符具體情況:Object.defineProperty

①中的Object.create() 也可以配置對象屬性.
>> Object.defineProperty(obj, attr, descriptor) -- 配置對象單個屬性
1: obj:在此對象上配置屬性. attr:要定義/修改的屬性. descriptor:屬性描述符對象.  描述符分為:數(shù)據(jù)描述符 , 存取描述符 
2: <數(shù)據(jù)描述符>和<存取描述符>均具有以下可選鍵值:
   configurable: 布爾值 // true:該屬性可被改變,可被刪除. 默認為false.
   enumerable: 布爾值 // true:該屬性可被枚舉. 默認為false.
   <數(shù)據(jù)描述符>可選鍵值:
   value: 任何有效的JS值. 默認為undefined. //該屬性的值
   writable: 布爾值. // true: 值可以被賦值運算符改變. 默認為false.
   <存取描述符>可選鍵值:
   get: 在獲取屬性值時,返回此方法的函數(shù)返回值.  默認為undefined.
   set: 在修改屬性值時,此方法的函數(shù)返回值,成為屬性的新值.  默認為undefined.
3: 具體請看標題下有地址[Object.defineProperty](http://www.reibang.com/p/5eeba874d473)


>> Object.defineProperties(obj, props) -- 配置對象多個屬性
1: obj:在此對象上配置屬性. props: 多個屬性要配置的屬性描述符對象.
2: 規(guī)則同Object.defineProperty().
3: 例子: Object.defineProperties(obj, {
   "attr": {
    value: true,
    writable: true
  },
  "attr2": {
    value: "Hello",
    writable: false
  }
}); 

>> Object.getOwnPropertyDescriptor(obj, attr) -- 返回指定對象的指定屬性的屬性描述符.
1: obj: 要查看屬性的對象. attr: 要查看的屬性.
2: 返回描述符對象. 若obj不存在attr屬性返回undefined.
3: 例: Object.getOwnPropertyDescriptor({a:1},'a') // Object {value: 1, writable: true, enumerable: true, configurable: true}
 
>> Object.getOwnPropertyNames(obj) -- 返回對象由自身的所有屬性名(包括不可枚舉的)組成的數(shù)組
1: obj:要查看的對象.
2: 返回給定對象上找到的屬性對應的字符串數(shù)組盹憎。
3: 例: Object.getOwnPropertyNames({a:1,b:2}) // ["a", "b"]

>> Object.getOwnPropertySymbols(obj) -- 對象的symbol屬性鍵
1: obj: 要查看的對象.
2: 返回所有stmbol類型屬性鍵.

⑤ 凍結,密封,禁止拓展.

>> Object.freeze(obj) -- 凍結對象
1: obj:要被凍結的對象.
2: 凍結指的是:
   不能給對象添加新屬性.
   不能修改,刪除已有屬性.
   不能修改屬性的可枚舉性牡辽、可配置性、可寫性.
   若屬性的值是對象,則該對象的屬性不會被凍結,你可以對其進行凍結.
3: 凍結后修改屬性會靜默失敗,嚴格模式下會報錯.
4: 返回凍結后的對象.

>> Object.seal(obj) -- 密封對象
1: obj:要被密封的對象.
2: 密封指定與凍結的唯一區(qū)別.
   屬性的值,可以進行修改,其余相同.
3: 返回密封后的對象.

>> Object.preventExtensions(obj)
1: obj: 要設置為不可擴展的對象.
2: 不可拓展是指,不可以添加新的屬性. 可以刪除,修改.
3: 返回設置后的對象.

>> Object.isFrozen(obj)
1: obj:要檢測的對象.
2: 一個對象是凍結的(frozen)是指它不可擴展
,所有屬性都是不可配置的(configurable)侨嘀,且所有數(shù)據(jù)屬性(properties)都是不可寫的(writable). 數(shù)據(jù)屬性是指那些沒有取值器(getter)或賦值器(setter)的屬性。
3: 例:  一個不可拓展(密封)的<空對象> ,凍結后的對象都返回true.
4: 符合2情況,返回treu,否則返回false.

>> Object.isExtensible(obj) -- 檢測對象是否可拓展
1: obj:要檢測的對象.
2: 不可拓展返回true ,反則返回false
   凍結,密封,不可拓展,都會返回true捂襟,

>> Object.isSealed(obj) -- 是否是被密封的
1: obj:要檢測的對象.
2: 如果對象是密封的返回true,否則返回false. 
   密封對象是指那些不可拓展的,且自身屬性都不可配置(configurable)且屬性不可刪除的對象(其可以是可寫的).
>>實例方法(原型的方法,方法都在原型上定義)
let obj = {a:1,b:2}

>> obj.hasOwnProperty(attr) -- 對象是否有指定屬性(而不是其原型有).
1: attr:要檢測的屬性(字符串或者Symbol).
2: 和 in 運算符不同,in會去查看原型鏈的屬性.
3: for...in中使用其進行篩選.
4: 有則返回true,無則返回false.

>> obj.propertyIsEnumerable(attr) -- 屬性是否可以枚舉.
1: attr: 要檢測的屬性.
2: 可以被枚舉返回true,反則返回false.

>> prototypeObj.isPrototypeOf(obj) -- 檢測prototypeObj對象是否在obj的原型鏈上.
1: obj: 在該對象的原型鏈上查找. prototypeObj: 一個原型對象.
2: 是則返回treu,否則返回false.
3: 與instanceof不同. instanceof是檢測是否是obj的構造函數(shù).

>> obj.toString() -- 該對象的字符串形式.
1: obj: 一個對象.
2: 返回該對象的字符串形式.

>> obj.valueOf() -- 返回該對象的原始值.
1: obj: 一個對象.
2: 返回該對象的原始值.
>>實例屬性
>> obj.constructor -- 對象的構造函數(shù)
1: obj: 對象.  
2: 返回該對象的構造函數(shù).
3: DOM對象也可以. 例如:
   document.constructor // function HTMLDocument() { [native code] }
4: 此對象可以手動改變.

>> obj.__proto__ -- 對象原型,和構造函數(shù)的prototype指向同一對象
1: obj:對象.
2: 不鼓勵使用,建議使用getPrototypeOf()

以上是我所知的的東西飒炎,有任何錯誤,請在評論指出笆豁!
O(∩_∩)O謝謝你的觀看~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赤赊,隨后出現(xiàn)的幾起案子闯狱,更是在濱河造成了極大的恐慌,老刑警劉巖抛计,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哄孤,死亡現(xiàn)場離奇詭異,居然都是意外死亡吹截,警方通過查閱死者的電腦和手機瘦陈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來波俄,“玉大人晨逝,你說我怎么就攤上這事∨称蹋” “怎么了捉貌?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長冬念。 經(jīng)常有香客問我趁窃,道長,這世上最難降的妖魔是什么急前? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任醒陆,我火速辦了婚禮,結果婚禮上裆针,老公的妹妹穿的比我還像新娘刨摩。我一直安慰自己,他們只是感情好据块,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布码邻。 她就那樣靜靜地躺著,像睡著了一般另假。 火紅的嫁衣襯著肌膚如雪像屋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天边篮,我揣著相機與錄音己莺,去河邊找鬼奏甫。 笑死,一個胖子當著我的面吹牛凌受,可吹牛的內容都是我干的阵子。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼胜蛉,長吁一口氣:“原來是場噩夢啊……” “哼挠进!你這毒婦竟也來了?” 一聲冷哼從身側響起誊册,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤领突,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后案怯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體君旦,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年嘲碱,在試婚紗的時候發(fā)現(xiàn)自己被綠了金砍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡麦锯,死狀恐怖恕稠,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情扶欣,我是刑警寧澤谱俭,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宵蛀,受9級特大地震影響昆著,放射性物質發(fā)生泄漏。R本人自食惡果不足惜术陶,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一凑懂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梧宫,春花似錦接谨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至忌卤,卻和暖如春扫夜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工笤闯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堕阔,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓颗味,卻偏偏與公主長得像超陆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浦马,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容

  • 函數(shù)和對象 1时呀、函數(shù) 1.1 函數(shù)概述 函數(shù)對于任何一門語言來說都是核心的概念。通過函數(shù)可以封裝任意多條語句晶默,而且...
    道無虛閱讀 4,566評論 0 5
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持退唠,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠荤胁,并抽取幸運大...
    HetfieldJoe閱讀 6,554評論 3 22
  • 博客內容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創(chuàng)建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,424評論 3 12
  • 上周五從BD離職了,走之前跟同事一起吃了一頓飯來歡送我屎债,臨走的時候仅政,組里的同事也陪著我一起下樓,把我送上了回學校的...
    genglintong閱讀 543評論 0 0
  • 有好長一段時間我對于自己手上的moto 360 sport能不能升級到android wear 2.0并不關心盆驹。因...
    好帥氣的昵稱啊閱讀 538評論 0 0