摘要:對(duì)象是無(wú)序?qū)傩缘募嫌袃煞N創(chuàng)建對(duì)象的方式字面量構(gòu)造函數(shù)定義個(gè)每一個(gè)類別的對(duì)象普通對(duì)象具有對(duì)象所有默認(rèn)的內(nèi)部行為特異對(duì)象具有某些與默認(rèn)行為不符的內(nèi)部行為標(biāo)準(zhǔn)對(duì)象內(nèi)建對(duì)象對(duì)象屬性的簡(jiǎn)寫屬性的名稱和變量的名稱一樣的話,可以只寫屬性的名稱分別把參數(shù)
對(duì)象是無(wú)序?qū)傩缘募?/strong>
有兩種創(chuàng)建對(duì)象的方式
//字面量 var obj = { name : "obama", age :77 } //構(gòu)造函數(shù) var obj = new Object(); obj.name = "obama"
ES6定義個(gè)每一個(gè)類別的對(duì)象
普通對(duì)象ordinary(具有JS對(duì)象所有默認(rèn)的內(nèi)部行為)
特異對(duì)象exotic(具有某些與默認(rèn)行為不符的內(nèi)部行為)
標(biāo)準(zhǔn)對(duì)象standard
內(nèi)建對(duì)象buildin
對(duì)象屬性的簡(jiǎn)寫
屬性的名稱和變量的名稱一樣的話,可以只寫屬性的名稱
function Obj(name,age){ return { name : name, //分別把參數(shù)的值賦予對(duì)象的屬性,并且是同名的屬性名稱 age:age } } //簡(jiǎn)寫的屬性 function Obj(name ,age){ //簡(jiǎn)寫的方法屬性名稱和參數(shù)的名稱是一樣的,,可以混在一起的寫 return { name, age, } } Obj("obama",77) //{name: "obama",age:77}
可計(jì)算的屬性名稱
//對(duì)象屬性的名稱可以是標(biāo)識(shí)符,或者是字符串,讀取屬性的方法使用點(diǎn)號(hào)或者方括號(hào)(內(nèi)部都是字符串) var obj = { a:"obama", "a b c d" : 34, //此時(shí)不能用點(diǎn)號(hào)讀取屬性 ["hello"]:"world" //此時(shí)的方括號(hào)里面的字符串是可以計(jì)算的,必須用方括號(hào) //es5和es6的區(qū)別是前者要外部賦值時(shí)候使用,后者都可以 } obj.a //obama; obj["a b c d"] //34
重復(fù)的屬性名稱
不會(huì)報(bào)錯(cuò),直接取值最后的屬性
"use strict" var obj = { age : 23, age :34 } //es6最終會(huì)age = 34;
自有屬性的枚舉順序 對(duì)需要遍歷的方法
數(shù)字屬性在前面按照順序排列,其他的字符串屬性和Symbol按照加入的順序排列
//ES5之前并沒(méi)有定義如何排序的,但是ES6開始定義如何返回的順序 var obj ={ a:2, 2:34, d:23, 1:23, f:2 } Object.keys(obj) //["1", "2", "a", "d", "f"]
對(duì)象方法的簡(jiǎn)寫
可以省略function關(guān)鍵字,直接名稱方法
var obj = { name : "obama", behavor:function(){ alert("i am presdent of Amercia") } } var obj = { name :"bush", behavor(){ alert("i am presdent of Amercia") //簡(jiǎn)寫的語(yǔ)法,此方法有個(gè)name的屬性即使括號(hào)前的名稱 } }
擴(kuò)展的ES6方法
1,Object.is()比較兩個(gè)變量的大小對(duì)比===
NaN === NaN //false Object.is(NaN,NaN) //false; -0 === +0 //true Object.is(-0,+0) //false; //除以上的區(qū)別其他都是類似的
2,Object.assign()接受任意多的對(duì)象參數(shù),同名的屬性后面會(huì)覆蓋前面的同名屬性,深拷貝一個(gè)對(duì)象
function mixin(rec,sup){ Object.keys(sup).forEach(function(key){ rec[key] = sup[key]; //此處是淺拷貝 }); retrun rec; } var rec = {}; var obj1 = {name : "obama"}; var obj2 = {age : 34}; var obj3 = {name : "bush",beha(){console.log("this is presdent")}}; Object.assign(rec,obj1,obj2,obj3) //{name: "bush", age: 34, beha: ?}深度拷貝
擴(kuò)展的原型
var str = new String("this is string"); var obj = { name : "obma"}; var test = Object.create(str); str.isPrototypeOf(test) //true test.__proto__ = obj; //強(qiáng)制的賦值 obj.isPrototypeOf(test) //true Object.getPrototypeOf(test) //str //ES6新的方法 test.setPrototype(obj) obj.isPrototypeOf(test) //true
super原型的指針只存在簡(jiǎn)寫的方法中
var a = { aa(){return "a"} }; var b = { aa(){return "b"} }; var c = { c(){ return Object.getPrototypeOf(this).aa.call(this)+"this is c" //通原型的方法調(diào)用 } } var c = { c(){ return super.aa()+"this is here"; //有function關(guān)鍵字會(huì)報(bào)錯(cuò) } } Object.setPrototypeOf(c,b); var d = Object.create(c) //報(bào)錯(cuò),this的指向有問(wèn)題,調(diào)用棧超出;使用super避免了this 的指向
對(duì)象方法正式確定,添加[[homeObject]]指定放賦予的對(duì)象
SET
es5對(duì)象的限制,同名屬性會(huì)覆蓋,屬性名稱必須是字符串,
set是另外一種有序列表,包含相互獨(dú)立的不重復(fù)的值,不會(huì)對(duì)存儲(chǔ)的值進(jìn)行類轉(zhuǎn)換如果需要鍵名的話,和值是一樣的
const set = new Set([1,2]); //參數(shù)是有遍歷接口的數(shù)據(jù); set.add(3) //增加數(shù)據(jù) set.has(3) //判斷是否包含某個(gè)值 set.delete(3) //移除元素 set.clear() // 清除元素 set.forEach((key,value,newSet)=>console.log(key,value,newSet))//默認(rèn)有三個(gè)參數(shù),值,鍵名,原數(shù)據(jù) //使用擴(kuò)展運(yùn)算符轉(zhuǎn)為數(shù)組類型 const arrr = [...set]; //weakSet傳入的值必須是對(duì)象,構(gòu)造函數(shù)沒(méi)有參數(shù),只有三個(gè)方法,add,has,delete,不可以遍歷,也沒(méi)有size屬性
MAP
屬性和值可以是任何數(shù)據(jù)類型,屬性的判斷是透過(guò)Object.is()方法判斷的;
const map = new Map(); map.set("age",12); //寫入數(shù)據(jù) map.get("age") //讀取數(shù)據(jù) ,如果數(shù)據(jù)的不存在 undefined; //和Set一樣有has,delete,,clear,size的方法
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/89112.html
摘要:用于將對(duì)象轉(zhuǎn)為數(shù)組可遍歷和類數(shù)組對(duì)象部署屬性的對(duì)象和擴(kuò)展運(yùn)算符的區(qū)別是任何具有屬性的都可以使用的方法是用原型該方法還有一個(gè)參數(shù)類似的新方法將字符串轉(zhuǎn)化為數(shù)組,特別是大于的單個(gè)字符,避免分割成多個(gè)用來(lái)彌補(bǔ)構(gòu)造函數(shù)的歧義三個(gè)空值只有一個(gè)參數(shù)其實(shí) 1,Array.from用于將對(duì)象轉(zhuǎn)為數(shù)組(可遍歷和類數(shù)組對(duì)象部署Iterator 屬性的對(duì)象)和擴(kuò)展運(yùn)算符的區(qū)別是任何具有Length屬性的都可...
摘要:用于修改某些操作的默認(rèn)行為和訪問(wèn)器屬性的行為類似在對(duì)象的前面多一層代理,對(duì)象字面量中定義屬性的特性方法,訪問(wèn)器屬性此時(shí)屬性被定義為訪問(wèn)器屬性不一樣的寫法中是用代理的寫法第一個(gè)參數(shù)是對(duì)象,第二個(gè)是要操作的方法對(duì)象也有兩個(gè)屬性,一個(gè)是目標(biāo)對(duì)象, 1,Proxy用于修改某些操作的默認(rèn)行為和訪問(wèn)器屬性的行為類似,在對(duì)象的前面多一層代理, const obj = { ...
angular2是什么?我猜不容我贅述,各位一定略有耳聞,無(wú)論是曾經(jīng)AngularJS的擁躉,亦或是React的粉絲,都或多或少的對(duì)她有過(guò)一點(diǎn)了解。未見(jiàn)其物、先聞其聲,angular2在問(wèn)世之前已經(jīng)做足了宣傳,想必諸位也一定被下面各種詞匯所震懾,什么:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive ...
摘要:之前的函數(shù)聲明及表達(dá)式函數(shù)的聲明函數(shù)表達(dá)式也可以此時(shí)的只是這個(gè)匿名函數(shù)的名字,和變量沒(méi)有關(guān)系構(gòu)造函數(shù)這種方法會(huì)運(yùn)行兩次代碼先實(shí)例后執(zhí)行函數(shù)體數(shù)的默認(rèn)值如果沒(méi)有傳入?yún)?shù)就使用默認(rèn)值,利用的短路特性傳入的參數(shù)為值會(huì)忽略判斷是否傳參,如果沒(méi) ES5之前的函數(shù)聲明及表達(dá)式1,函數(shù)的聲明 function fn(){ dosomething; }; 2,函數(shù)表達(dá)式 var fn = f...
摘要:變量和常量的聲明一般的聲明,不在函數(shù)內(nèi)就是全局變量,值可以是基本和引用值,可以隨時(shí)修改和刪除語(yǔ)法同一個(gè)作用域的聲明,只要有同樣的聲明都會(huì)報(bào)錯(cuò),只能修改值語(yǔ)法,和一樣,但是不能更改值以上兩個(gè)語(yǔ)法都不存在變量提升的效果直接使用的話,直接引用錯(cuò)誤 變量和常量的聲明 var a = 34; //一般的聲明,不在函數(shù)內(nèi)就是全局變量,值可以是基本和引用值,可以隨時(shí)修改和刪除 ...
閱讀 716·2021-11-18 10:02
閱讀 3607·2021-09-02 10:21
閱讀 1752·2021-08-27 16:16
閱讀 2065·2019-08-30 15:56
閱讀 2393·2019-08-29 16:53
閱讀 1381·2019-08-29 11:18
閱讀 2960·2019-08-26 10:33
閱讀 2648·2019-08-23 18:34