ES6常用知識點(diǎn)總結(jié)歸納

原文地址:zclzone.com/zhangsheng

更佳閱讀體驗(yàn):zclzone.gitee.io/zhangsheng

一沮明、新的聲明方式

  1. let:聲明的變量只在代碼塊內(nèi)有效
  2. const: 聲明常量殖蚕,聲明時必須賦值且不可改變
let a = 'aaa';
const b = 'bbb';
console.log(a, b);

二蕾盯、變量的解構(gòu)賦值

數(shù)組解構(gòu)賦值

let [aa, bb, cc] = [0, 1, 2];

對象解構(gòu)賦值

let { cnName, enName } = {
  id: '151521574',
  cnName: '張生',
  enName: 'Ronnie'
};
console.log(cnName, enName); //'張生'蛀骇,'Ronnie'

三般贼、擴(kuò)展運(yùn)算符和 rest 運(yùn)算符

對象擴(kuò)展運(yùn)算符

function test01(...arg) {
  console.log(arg[0]); //1
  console.log(arg[1]); //2
  console.log(arg[2]); //3
  console.log(arg[3]); //undefined
}
test01(1, 2, 3);

let arr1 = [1, 2, 3];
let arr2 = [...arr1];
arr2.push(4); //此時不改變arr1
console.log(arr1); //[1,2,3]
console.log(arr2); //[1,2,3,4]

rest 運(yùn)算符(表示剩余參數(shù))

function test02(first, ...arg) {
  for (let item of arg) {
    console.log(item); //依次輸出1,2限嫌,3,4,5,6
  }
  console.log(first); //0
}
test02(0, 1, 2, 3, 4, 5, 6);

四愁拭、字符串模版

字符串模版

let name = 'Ronnie';
let str = `大家好栓袖,我是<b>${name}</b><br/>很高興認(rèn)識大家`;
document.write(str);

字符串查找

let str = `大家好匣摘,我是<b>${name}</b><br/>很高興認(rèn)識大家`;
console.log(str.includes('不高興')); //false
console.log(str.startsWith('大家好')); //判斷開頭是否存在,true
console.log(str.endsWith('大家')); //判斷結(jié)尾是否存在裹刮,true

五音榜、數(shù)字操作

二進(jìn)制聲明 Binary

let binary = 0b010101;
console.log(binary); //21

八進(jìn)制聲明 Octal

let octal = 0o666;
console.log(octal); //438

判斷是否為數(shù)字

Number.isFinite(888); //true
Number.isFinite('888'); //false,不會先將字符串嘗試轉(zhuǎn)換成數(shù)字再判斷
Number.isFinite('asd'); //false
Number.isFinite(undefined); //false
Number.isFinite(NaN); //false

判斷是否是整數(shù)

Number.isInteger(1.1); //false
Number.isInteger(1); //true

最大和最小安全整數(shù)

Number.MAX_SAFE_INTEGER;
Number.MIN_SAFE_INTEGER;

判斷是否為安全整數(shù)

Number.isSafeInteger(Math.pow(2, 53) - 1); //true
Number.isSafeInteger(Math.pow(2, 53) + 1); //false

六捧弃、新增的數(shù)組知識

數(shù)組格式轉(zhuǎn)換: Array.from赠叼、 Array.of

let json = {
  '0': 'Ronnie',
  '1': 'Rose',
  '2': 'zhangsheng',
  '3': 'Json',
  length: 4
};

let jsonArr = Array.from(json);
console.log(jsonArr); //['Ronnie','Rose','zhangsheng','Json']

let strArr = Array.of('a', 'b', 'c', 'd');
console.log(strArr); //['a', 'b', 'c', 'd']

find()方法:返回滿足條件的第一個元素,三個參數(shù)

  • value:當(dāng)前查找的值
  • index: 當(dāng)前查找的值的索引
  • strArr: 查找的原數(shù)組
let findRst = strArr.find((value, index, strArr) => {
  return value === 'd' || value === 'a';
});
console.log(findRst); //a

fill() 方法

let fillArr = ['Ronnie', 'Rose', 'Zhangsheng'];
fillArr.fill('es6', 1, 3); //將索引為[1,3),即索引為1和2的值替換為'es6'
console.log(fillArr); //["Ronnie", "es6", "es6"]

for...of

for (let item of fillArr) {
  console.log(item);
}
//帶索引的方式
for (let [index, value] of fillArr.entries()) {
  console.log(index + ':' + value);
}

entries() 生成的是 Iterator 形式的數(shù)組,這種形式的好處就是可以讓我們在需要時用 next()手動跳轉(zhuǎn)到下一個值

let list = fillArr.entries();
console.log(list.next().value); //[0, "Ronnie"]
console.log(list.next().value); //[1, "es6"]
console.log(list.next().value); //[2, "es6"]
console.log(list.next().value); //undefined

some 方法: 返回一個 Boolean塔橡,判斷是否有元素符合 func 條件

let someArr = [1, 2, 3, 4];
someArr.some(item => item > 1); //true

every 方法: 返回一個 Boolean梅割,判斷每一個元素是否符合 func 條件

let everyArr = [1, 2, 3, 4];
everyArr.every(item => item > 3); //false
everyArr.every(item => item >= 1); //true

filter 方法: 返回一個符合 func 條件的元素數(shù)組,不改變原來數(shù)組

let ages = [23, 28, 25, 32];
ages.filter(item => item > 25); //[28,32]
console.log(ages); //[23, 28, 25, 32]

map 方法: 返回一個新的 array,數(shù)組元素由每一次調(diào)用函數(shù)產(chǎn)生結(jié)果組成

let mapArr = [1, 2, 3, 4, 5, 6];
mapArr.map(item => item + 1); //[2,3,4,5,6,7]

in 方法:用來判斷對象或者數(shù)組中是否存在某個 key 或索引

let inObj = {
  cnName: '張生',
  enName: 'Ronnie'
};
console.log('enName' in inObj); //true
console.log(4 in ages); //false

七葛家、ES6 中的函數(shù)

函數(shù)解構(gòu) json 對象

let jsonObj = {
  cnName: '張生',
  enName: 'Rose'
};

function fun({ cnName, enName = 'Ronnie' }) {
  console.log(cnName, enName);
}
fun(jsonObj); //張生 Rose

八户辞、ES6 中的對象

對象賦值:ES6 允許把聲明的變量直接賦值給對象

let nameObj = { cnName, enName };
console.log(nameObj); //{cnName: "張生",enName: "Ronnie"}

//對象Key值構(gòu)建
let key = 'skill';
let keyObj = {
  [key]: 'web'
};
console.log(keyObj); //skill: "web"

Object.is( ) 對象比較,===為同值相等,is()為嚴(yán)格相等

console.log(+0 === -0); //true
console.log(NaN === NaN); //false
console.log(Object.is(+0, -0)); //false
console.log(Object.is(NaN, NaN)); //true

Object.assign()對象合并

let obj1 = { cnName: '張生' };
let obj2 = { enName: 'Ronnie', age: 26 };
let obj3 = Object.assign(obj1, obj2);
console.log(obj3); //{cnName: "張生", enName: "Ronnie", age: 26}

九癞谒、Set底燎、WeakSet 以及 map 數(shù)據(jù)結(jié)構(gòu)

Set:Set 和 Array 的區(qū)別是 Set 不允許內(nèi)部有重復(fù)的值刃榨,如果有只顯示一個,相當(dāng)于去重

Set 的聲明

let setArr = new Set(['ronnie', 'zhangsheng', 'web']);
console.log(setArr); //Set(3) {'ronnie', 'zhangsheng', 'web'}

Set 值的增刪查

setArr.add('前端'); //增
setArr.delete('web'); //刪
setArr.has('前端'); //查: true
setArr.clear(); //清空

Set 的遍歷

for (let item of setArr) {
  console.log(item);
}

size 屬性

console.log(setArr.size); //3

WeakSet:用于存儲對象的 set

WeakSet 聲明双仍,聲明是不允許賦值枢希,否則報錯,同時 WeakSet 里邊的值也是不允許重復(fù)的

let weakObj = new WeakSet();
weakObj.add({ cnName: '張生', age: 26 });
console.log(weakObj);

map:map 是一種靈活,簡單的適合一對一查找的數(shù)據(jù)結(jié)構(gòu)朱沃,它跟 json 對象很像苞轿,但反應(yīng)速度更高,而且 Map 的靈活性要更好逗物,你可以把它看成一種特殊的鍵值對搬卒,但 key 可以設(shè)置成數(shù)組,值也可以設(shè)置成字符串

map 的聲明

let map = new Map();

map 的增刪查

let obj4 = { cnName: '張生', age: 26 };
map.set('ronnie', obj4); //增
map.set('ronnie', '永遠(yuǎn)十八歲'); //改:相同key則修改
map.set(obj4, 'Ronnie'); //增:key也可以為對象
console.log(map);
console.log(map.get(obj4)); //取值: Ronnie
map.delete('ronnie'); //刪除:根據(jù)key值刪除
console.log(map.size); //size屬性
console.log(map.has(obj4)); //has:查找是否存在
map.clear(); //clear清除所有元素
console.log(map);

十翎卓、Proxy 預(yù)處理

Proxy: 類似于鉤子函數(shù)契邀,當(dāng)我們在操作一個對象或者方法時會有幾種前置動作

  • get 屬性:get 屬性是在你得到某對象屬性值時預(yù)處理的方法,它接收三個參數(shù)
    1. target:得到的目標(biāo)值
    2. key:目標(biāo)的 key 值失暴,相當(dāng)于對象的屬性
    3. property:可選參數(shù)坯门,這個不常用
  • set 屬性:set 屬性是指你要改變 Proxy 屬性值時,進(jìn)行的預(yù)先處理逗扒。它接收四個參數(shù)。
    1. target:目標(biāo)值
    2. key:目標(biāo)的 Key 值
    3. value:要改變的值
    4. receiver:改變前的原始值
let pro = new Proxy(
  {
    add: function(val) {
      return val + 10;
    },
    name: 'I am Ronnie'
  },
  {
    get: function(target, key) {
      console.log('come in Get');
      return target[key];
    },
    set: function(target, key, value, receiver) {
      console.log(`setting ${key} = ${value}`);
      return (target[key] = value);
    }
  }
);
console.log(pro.name); //先輸出 come in Get  再輸出 I am Ronnie
pro.name = '張生'; //setting name = 張生

十一矩肩、promise 對象的使用

promise 的出現(xiàn)是為了解決回調(diào)地獄的問題

promise 的基本用法(舉例說明),比如把大象放入冰箱有三個步驟

  1. 打開冰箱門
  2. 把大象放進(jìn)去
  3. 關(guān)上冰箱門
let isSuccess = true;
function step1(resolve, reject) {
  console.log('First step');
  if (isSuccess) {
    resolve('成功打開冰箱門');
  } else {
    reject('打開冰箱門出錯');
  }
}
function step2(resolve, reject) {
  console.log('Second step');
  isSuccess = false;
  if (isSuccess) {
    resolve('成功把大象放進(jìn)去');
  } else {
    reject('把大象放進(jìn)去出錯');
  }
}
function step3(resolve, reject) {
  console.log('Third step');
  if (isSuccess) {
    resolve('成功關(guān)上冰箱門');
  } else {
    reject('關(guān)上冰箱門出錯');
  }
}

new Promise(step1)
  .then(function(rst) {
    console.log(rst);
    return new Promise(step2);
  })
  .then(function(rst) {
    console.log(rst);
    return new Promise(step3);
  })
  .then(function(rst) {
    // console.log(rst);
    return rst;
  })
  .catch(e => {
    console.log(e); //捕獲Promise reject返回的錯誤信息
  });

十二、class 類的使用

類的聲明與使用

class Coder {
  name(val) {
    console.log(val);
    return val;
  }
  skill(val) {
    console.log(this.name('Ronnie') + ':' + 'Skill-' + val);
  }
  constructor(cnName, age) {
    this.cnName = cnName;
    this.age = age;
  }
  introduce() {
    return this.cnName + ':' + this.age;
  }
}

let Ronnie = new Coder('張生', 26);
Ronnie.name('Ronnie'); //Ronnie
Ronnie.skill('web'); //Ronnie: Skill-web
console.log(Ronnie.introduce()); //Ronnie:26

class 的繼承

class htmler extends Coder {}

let zhangsheng = new htmler();
zhangsheng.name('zhangsheng'); //zhangsheng

十三痹升、模塊化操作

模塊化操作主要包括兩個方面

  1. export :負(fù)責(zé)進(jìn)行模塊化,也是模塊的輸出
  2. import : 負(fù)責(zé)把模塊引疼蛾,也是模塊的引入操作

export 的用法:export 可以讓我們把變量,函數(shù)察郁,對象進(jìn)行模塊化,提供外部調(diào)用接口皮钠,讓外部進(jìn)行引用

export let name = 'Ronnie'; //export   temp.js

import { a } from './temp.js'; //在index.js中以import的形式引入  此時的a對應(yīng)的是temp.js中輸出的name

多變量的輸出以及函數(shù)的輸出

let var1 = 'Ronnie';
var var2 = '張生';
var var3 = 'zhangsheng';
function add(a, b) {
  return a + b;
}
export { var1, var2, var3, add };
import { var1, add } from './temp'; //對應(yīng)的引入方式

export defalut: 只能輸出一個

let str = 'ronnie is so handsome';
export default str;
import aaa from './temp.js'; //對應(yīng)的引入方式,引入的名稱可以任意

OK麦轰,以上就是關(guān)于ES6的常用知識點(diǎn)了砖织,關(guān)于Proxy預(yù)處理的介紹可能不是很詳細(xì)末荐,具體講解的話將會是長篇大論侧纯,所以這里就不深入介紹了,感興趣的朋友可以自行搜索別人的文章甲脏,相信很多朋友都解釋得比我好眶熬。

怕什么真理無窮,進(jìn)一寸有進(jìn)一寸的驚喜~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末块请,一起剝皮案震驚了整個濱河市娜氏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌负乡,老刑警劉巖牍白,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異抖棘,居然都是意外死亡茂腥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門切省,熙熙樓的掌柜王于貴愁眉苦臉地迎上來最岗,“玉大人,你說我怎么就攤上這事朝捆“愣桑” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵芙盘,是天一觀的道長驯用。 經(jīng)常有香客問我,道長儒老,這世上最難降的妖魔是什么蝴乔? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮驮樊,結(jié)果婚禮上薇正,老公的妹妹穿的比我還像新娘。我一直安慰自己囚衔,他們只是感情好挖腰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著练湿,像睡著了一般猴仑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鞠鲜,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天宁脊,我揣著相機(jī)與錄音断国,去河邊找鬼。 笑死榆苞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坐漏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼街夭,長吁一口氣:“原來是場噩夢啊……” “哼躏筏!你這毒婦竟也來了趁尼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤砚殿,失蹤者是張志新(化名)和其女友劉穎似炎,沒想到半個月后羡藐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯许,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岸晦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年启上,在試婚紗的時候發(fā)現(xiàn)自己被綠了冈在。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片包券。...
    茶點(diǎn)故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖付秕,靈堂內(nèi)的尸體忽然破棺而出询吴,到底是詐尸還是另有隱情亮元,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布奉瘤,位于F島的核電站盗温,受9級特大地震影響苛秕,放射性物質(zhì)發(fā)生泄漏艇劫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一蟹演、第九天 我趴在偏房一處隱蔽的房頂上張望酒请。 院中可真熱鬧鸣个,春花似錦、人聲如沸昼窗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至温赔,卻和暖如春帅刀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骇窍。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工腹纳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嘲恍,地道東北人雄驹。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓医舆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爷速。 傳聞我的和親對象是個殘疾皇子霞怀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評論 2 348

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

  • [TOC] 參考阮一峰的ECMAScript 6 入門參考深入淺出ES6 let和const let和const都...
    郭子web閱讀 1,773評論 0 1
  • 什么是ES6廉沮? ECMAScript 6.0 是繼ECMAScript 5.1 之后 JavaScript 語...
    多多醬_DuoDuo_閱讀 1,088評論 0 4
  • 強(qiáng)大的for-of循環(huán) ES6不會破壞你已經(jīng)寫好的JS代碼废封。目前看來,成千上萬的Web網(wǎng)站依賴for-in循環(huán),其...
    Awe閱讀 7,511評論 2 7
  • 第一章:塊級作用域綁定 塊級聲明 1.var聲明及變量提升機(jī)制:在函數(shù)作用域或者全局作用域中通過關(guān)鍵字var聲明的...
    BeADre_wang閱讀 825評論 0 0
  • 一、let 和 constlet:變量聲明, const:只讀常量聲明(聲明的時候賦值)贝咙。 let 與 var 的...
    dadage456閱讀 760評論 0 0