JavavScript--ES5和ES6(下)

一、Map

基于set和array之上構(gòu)建的一個(gè)集合

1、Map的聲明

使用 new 關(guān)鍵字和 Map 構(gòu)造函數(shù)
let  m = new Map();
通過二維數(shù)組聲明
var arr = [[1,2],[3,4]]
var map = new Map(arr) //通過二維數(shù)組構(gòu)建的

2、Map的方法和屬性

  • set()
  • get()
  • has()
  • delete()
  • clear()
  • size
    初始化之后,可以使用 set()方法再添加鍵/值對(duì)。另外,可以使用 get()和 has()進(jìn)行查詢,可以通過 size 屬性獲取映射中的鍵/值對(duì)的數(shù)量,還可以使用 delete()和clear()刪除值。
const m = new Map(); 

alert(m.has("firstName")); // false 
alert(m.get("firstName")); // undefined 
alert(m.size); // 0 

m.set("firstName", "Matt") 
 .set("lastName", "Frisbie"); 
alert(m.has("firstName")); // true 
alert(m.get("firstName")); // Matt 
alert(m.size); // 2 

m.delete("firstName"); // 只刪除這一個(gè)鍵/值對(duì)

alert(m.has("firstName")); // false 
alert(m.has("lastName")); // true 
alert(m.size); // 1 

m.clear(); // 清除這個(gè)映射實(shí)例中的所有鍵/值對(duì)

alert(m.has("firstName")); // false 
alert(m.has("lastName")); // false 
alert(m.size); // 0

Map 實(shí)例會(huì)維護(hù)鍵值對(duì)的插入順序,因此可以根據(jù)插入順序執(zhí)行迭代操作。
可以
通過 entries()方法(或者 Symbol.iterator 屬性,它引用 entries())取得這個(gè)迭代器。
keys()和 values()分別返回以插入順序生成鍵和值的迭代器

const m = new Map([
 ["key1", "val1"], 
 ["key2", "val2"], 
 ["key3", "val3"] 
]); 
for (let key of m.keys()) { 
 alert(key); 
} 
// key1 
// key2 
// key3 
for (let key of m.values()) { 
 alert(key); 
} 
// value1 
// value2 
// value3

weakMap基于weakSet上面構(gòu)建map 也就是他的key是對(duì)象 只能是對(duì)象

二、解構(gòu)

var obj = {username:'jack',password:'123'}
// obj.username
// obj.password
//解構(gòu)來取 (通過key來解構(gòu)對(duì)應(yīng)的obj) {key} = {key:123}
var {password,username} = obj
console.log(username);
console.log(password);
//快速提取對(duì)象里面數(shù)據(jù)
var {age} = {age:18}
console.log(age);
//解構(gòu)取數(shù)組里面的內(nèi)容 按照位置來取對(duì)應(yīng)的值
var [o,p] = ['a','b']
console.log(o);
// 快速讀取值
var {sex} = {username:'jack',password:"123",age:'18',sex:"女"}
console.log(sex);

三、擴(kuò)展運(yùn)算符

...打開數(shù)組拿出里面的內(nèi)容

//擴(kuò)展運(yùn)算符
var arr = [1,3,5]
var arr1 = [2,4,6]
console.log(...arr); //解除數(shù)組的包裝 把他暴露出來 1 3 5
//如果你的方法里面需要,隔開他會(huì)默認(rèn)給你加上一個(gè),
console.log( 'abc'.concat(1,2,3,4,5));
console.log( 'abc'.concat(...arr,...arr1)); //默認(rèn)加上,

四、類

他是用于對(duì)象構(gòu)建的 (類只是一個(gè)構(gòu)建對(duì)象的容器 )調(diào)用這個(gè)class要使用new關(guān)鍵詞。

//類名首字母必須大寫
class Person{
constructor(){ //構(gòu)造器
//this必須在構(gòu)造器里面使用
this.age = 18 //類的屬性
this.sayHello = function(){ //類的方法
console.log('hello')
}
}
}
//構(gòu)建對(duì)象
var person = new Person()
console.log(person.age); //18
person.sayHello() //hello
//類名首字母必須大寫 class不能被重復(fù)定義
class Person1{
//constrctor調(diào)用 new的過程 每一次new 里面的內(nèi)容都會(huì)重新聲明
constructor(age=18,name='jack'){ //構(gòu)造器
//this必須在構(gòu)造器里面使用 this是指向?qū)嵗膶?duì)象
this.age = age //類的屬性
this.name = name
this.sayHello = function(){ //類的方法
console.log('hello')
}
}
run(){//在函數(shù)里面可以訪問對(duì)應(yīng)的this
console.log(this.name+'跑');
}
}
//使用new 調(diào)用的對(duì)應(yīng)構(gòu)造器的時(shí)候 就是在實(shí)例化的過程 而產(chǎn)生的對(duì)象被稱為實(shí)例化對(duì)象
var person = new Person1(18,'jack')
console.log(person); // age:18 name:jack sayHello:fn
var person1 = new Person1()
console.log(person1);
person1.run()
console.log( person1.sayHello == person.sayHello);//false
console.log( person1.run == person.run);//true

注意事項(xiàng)

  • class 修飾的類 類名首字母必須大寫
  • class 不允許重復(fù)聲明
  • class 里面this只能存在于constructor(構(gòu)造器)里面
  • class 里面this指向當(dāng)前實(shí)例化對(duì)象
  • 在實(shí)例化的過程 new的過程的 調(diào)用的constructor函數(shù) 跟其他函數(shù)無關(guān)(所以當(dāng)前在constructor都會(huì)重新聲明一次)

extends關(guān)鍵詞

extends 用于繼承 他會(huì)擁有父類所有的非私有的屬性及方法

class Person{
constructor(){
this.age = 18
}
run(){
console.log('跑');
}
}
//extends 關(guān)鍵詞聲明以后 在對(duì)應(yīng)的constructor里面想要使用this 必須先寫super()
class Son extends Person{
constructor(){
super()//指向父類Person的構(gòu)造器constructor
this.name = 'jack'
}
}
var son = new Son()
console.log(son);//獲取不到run的

注意事項(xiàng)

  • 在子類構(gòu)造里面如果想要使用this 必須先要使用super()
  • super指向父類的構(gòu)造器
  • 子類無法獲取構(gòu)造器之外的函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容