ES6-ES12新特性

前言:這里只是簡單列出ES新特性,以及舉例新特性的寫法串慰,想要更深入的了解偏塞,比如新特性和之前寫法的區(qū)別、好處邦鲫、優(yōu)缺點(diǎn)以及更多的使用場景灸叼,可以自行挖掘呦,這里就不一一介紹了庆捺。歡迎評論補(bǔ)充古今。

ES6(2015)

1、let和const

在ES6之前JS是沒有塊級作用域滔以,在ES6之后捉腥,有了塊級作用域的概念,const與let都是塊級作用域你画。

{   var a = 1; let b = 2; const c = 3; } 
 console.log(a); // 1
 console.log(b); // Uncaught ReferenceError: b is not defined
 console.log(c); // Uncaught ReferenceError: c is not defined
2抵碟、解構(gòu)賦值

可以方便的從數(shù)組或者對象中快速提取值賦給定義的變量桃漾。

let obj = { name: "zhu", age: 3 };
let { name, age } = obj;
console.log(name); // zz
console.log(age); // 3
3、模版字符串
var a = "zhuzhu";
var str = 'my name is' + a // 字符串拼接
var str2 = `my name is ${a}`; // 模板字符串
console.log(str); // my name is zhuzhu
console.log(str2); // my name is zhuzhu
4立磁、函數(shù)默認(rèn)參數(shù)
function foo(a = 1, b = 2) { // a呈队、b的默認(rèn)值
      console.log(a) // 3
      console.log(b) // 4
}
foo(3, 4) // 這里不傳剥槐,打印的就是1唱歧、2
5、箭頭函數(shù)(Arrow function)
() => { }
// 舉例
var list = [1, 2, 3, 4, 5];
const newList = list.map(item => item * 2);
console.log(newList); // [2, 4, 6, 8, 10]
6粒竖、擴(kuò)展運(yùn)算符

延展操作符(三個(gè)點(diǎn)...)可以在函數(shù)調(diào)用/數(shù)組構(gòu)造時(shí), 將數(shù)組表達(dá)式或者string在語法層面展開颅崩;還可以在構(gòu)造對象時(shí), 將對象表達(dá)式按key-value的方式展開

let objClone = { ...obj };
7、symbol

symbol 是ES6 引入了一種新的基本數(shù)據(jù)類型(原始數(shù)據(jù)類型) Symbol 蕊苗,表示獨(dú)一無二的值沿后。它是JavaScript 語言的第七種數(shù)據(jù)類型,前六種是: undefined 朽砰、 null 尖滚、布爾值(Boolean)、字符串(String)瞧柔、數(shù)值(Number)漆弄、對象(Object)。
每個(gè)從 Symbol() 返回的symbol值都是唯一的造锅。一個(gè)symbol值能作為對象屬性的標(biāo)識符撼唾;這是該數(shù)據(jù)類型僅有的目的

// Symbol語法與描述:直接使用 Symbol() 創(chuàng)建新的symbol類型,并用一個(gè)可選的字符串作為其描述
const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol('foo');

console.log(typeof symbol1); // "symbol"
console.log(symbol3.toString()); // "Symbol(foo)"
console.log(Symbol('foo') === Symbol('foo')); // false
8哥蔚、新的數(shù)據(jù)結(jié)構(gòu):Set

Set 對象允許你存儲任何類型的唯一值倒谷,無論是原始值或者是對象引用。

// 可用于數(shù)組去重
const numbers = [54,34,54,2,3,4,1,4,2,2,76,54,78,90,12,34];
console.log([...new Set(numbers)]); // [54, 34, 2, 3, 4, 1, 76, 78, 90, 12]
9糙箍、新的數(shù)據(jù)結(jié)構(gòu):Map

Map 對象保存鍵值對渤愁。任何值(對象或者原始值) 都可以作為一個(gè)鍵或一個(gè)值。

const map = new Map();
map.set('foo', true);
map.set('bar', false);
10深夯、模塊化抖格,export 和 export default import

export 和 export default 都可用于導(dǎo)出常量、函數(shù)塌西、文件他挎、模塊等 ,
export、import可以有多個(gè),export default僅有一個(gè)
通過export方式導(dǎo)出事扭,在導(dǎo)入時(shí)要加{ }逗柴,且不能自定義名字,export default不用加{ }蒜茴,且可以自定義名字

function renderHtml(url) { }
module.exports = {
    renderHtml
} // 導(dǎo)出

import { renderHtml } from "./module/renderHtml.js"; // 導(dǎo)入

function renderHtml(url) { }
exports.renderHtml = renderHtml; // 導(dǎo)出

import renderHtml from './module/renderHtml.js' // 導(dǎo)入

ES7(2016)

1胡本、數(shù)組方法include

判斷一個(gè)數(shù)組是否包含一個(gè)指定的值忠荞,根據(jù)情況殊霞,如果包含則返回 true摧阅,否則返回false。

const arr = [1, 2, 3]
console.log(arr.includes(2)); // true
console.log(arr.includes(4)); // false
2绷蹲、指數(shù)操作符**

相當(dāng)于Math.pow()

2**10 // 1024
Math.pow(2,10) // 1024

ES8(2017)

1棒卷、async/await

Promise可以解決回調(diào)地獄的問題,但是鏈?zhǔn)秸{(diào)用太多祝钢,則會變成另一種形式的回調(diào)地獄 —— 面條地獄比规,所以在ES8里則出現(xiàn)了Promise的語法糖async/await,專門解決這個(gè)問題拦英。

const runTask = async (code) => {
   await registeredTask(); // 注冊任務(wù)
};

runTask();
2蜒什、padStart()和padEnd()

用來補(bǔ)齊字符串

const str = '5';
console.log(str.padStart(2, '0'));  // 05
console.log(str.padEnd(2, '0'));  // 50
3、Object.values和Object.entries

Object.values()是一個(gè)與Object.keys()類似的新函數(shù)疤估,但返回的是Object自身屬性的所有值灾常,不包括繼承的值。
object.entries返回包含對象鍵名和鍵值的數(shù)組铃拇。

var obj = { name: "張三", age: 10 };
Object.values(obj) // ["張三", 10]

for (let [key, value] of Object.entries(obj)) {
      console.log(`${key}: ${value}`)
      // name: 張三
      // age: 10
}
4钞瀑、函數(shù)拓展,es2017規(guī)定函數(shù)的參數(shù)列表的結(jié)尾可以為逗號
5锚贱、Object.getOwnPropertyDescriptors()

方法用來獲取一個(gè)對象的所有自身屬性的描述符

const obj2 = { name: 'Jine', get age() { return '18' } };
Object.getOwnPropertyDescriptors(obj2)
image.png
6仔戈、SharedArrayBuffer對象

SharedArrayBuffer 對象用來表示一個(gè)通用的,固定長度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)拧廊,類似于 ArrayBuffer 對象监徘,它們都可以用來在共享內(nèi)存(shared memory)上創(chuàng)建視圖。與 ArrayBuffer 不同的是吧碾,SharedArrayBuffer 不能被分離凰盔。

let sab = new SharedArrayBuffer(1024); // 必須實(shí)例化
worker.postMessage(sab);

ES9(2018)

1、for await...of

異步迭代器倦春,主要用來遍歷異步對象

2户敬、promise.prototype.finally(),無論premise失敗成功都會走的方法
.then(() => {
       // 成功
}).catch(() => {
      // 失敗
}).finally(() => {
      // 成功失敗都走這里
});
3睁本、對象的擴(kuò)展運(yùn)算符

let obj1 = {c: 3} let obj = {...obj1,d:4}

ES10(2019)

1尿庐、trimStart和trimEnd,用來移除字符串首位空白格

var str=" 123"; str.trimStart(); // 123

2呢堰、flat和flatMap抄瑟,用于創(chuàng)建并返回一個(gè)新數(shù)組
var arr1 = [1, 2, 3, 4]
arr1.map(x => [x * 2]) // [[2], [4], [6], [8]]
arr1.flatMap(x => [x * 2]) // [2, 4, 6, 8]
// 深度為1
arr1.flatMap(x => [[x * 2]]) // [[2], [4], [6], [8]]
3、Object.formEntires

可以把鍵值對列表轉(zhuǎn)化成一個(gè)對象枉疼,和 Object.entries() 相對的皮假。

Object.fromEntries([
    ['foo', 1],
    ['bar', 2]
]) // {foo: 1, bar: 2}
4鞋拟、symbol描述,let dog = Symbol("dog")惹资,dog為描述
5贺纲、toString()
6、catch褪测,es2019之前猴誊,catch是帶有參數(shù),現(xiàn)在不帶參數(shù)
// 之前 
try {} catch(e) {};
// 現(xiàn)在 
try {} catch() {}

ES11(2020)

1汰扭、BigInt稠肘,js第八種基本類型福铅,BigInt 可以表示任意大的整數(shù)
2萝毛、空格合并運(yùn)算符(??),只有 ?? 左邊為 null 或 undefined時(shí)才返回右邊的值
3滑黔、可選鏈操作符
// 之前寫法
const name = (system && system.user && system.user.addr && system.user.addr.province && system.user.addr.province.name) || 'default';
// 之后寫法
const name = system?.user?.addr?.province?.name || 'default';

ES12(2021)

1笆包、replaceAll

返回全新字符串,所有符合匹配規(guī)則的字符都將被替換掉

var str = "hello word";
// 之前
str.replace(/o/g, "a); // hella ward
// 現(xiàn)在
str.replaceAll("o", "a"); // hella ward
2略荡、promise.any

只要其中一個(gè)promise成功庵佣,就返回那個(gè)已經(jīng)成功的permise,如果可疊戴對象中沒有一個(gè)premise成功汛兜,就返回一個(gè)失敗的premise

const promise1 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("promise1");
      //  reject("error promise1 ");
    }, 3000);
  });
};
const promise2 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("promise2");
      // reject("error promise2 ");
    }, 1000);
  });
};
const promise3 = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("promise3");
      // reject("error promise3 ");
    }, 2000);
  });
};
Promise.any([promise1(), promise2(), promise3()])
  .then((first) => {
    // 只要有一個(gè)請求成功 就會返回第一個(gè)請求成功的
    console.log(first); // 會返回promise2
  })
  .catch((error) => {
    // 所有三個(gè)全部請求失敗 才會來到這里
    console.log("error", error);
  });
3巴粪、weakRefs

使用weakRefs的class類創(chuàng)建對對象的弱引用

4、邏輯運(yùn)算符和賦值表達(dá)式

新特性結(jié)合了邏輯運(yùn)算符(&&粥谬,||肛根,??)和賦值表達(dá)式,
(1)&&=: x &&= y等同于x && (x = y);
(2)||=:x ||= y 等同于:x || (x = y)
(3)??=:x ??= y 等價(jià)于: x ?? (x = y);

5漏策、數(shù)字分隔符

用下劃線 _(U+005F)在數(shù)字間進(jìn)行分隔派哲。
let num = 1_000_000_000

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市掺喻,隨后出現(xiàn)的幾起案子芭届,更是在濱河造成了極大的恐慌,老刑警劉巖感耙,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褂乍,死亡現(xiàn)場離奇詭異,居然都是意外死亡即硼,警方通過查閱死者的電腦和手機(jī)逃片,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谦絮,“玉大人题诵,你說我怎么就攤上這事洁仗。” “怎么了性锭?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵赠潦,是天一觀的道長。 經(jīng)常有香客問我草冈,道長她奥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任怎棱,我火速辦了婚禮哩俭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拳恋。我一直安慰自己凡资,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布谬运。 她就那樣靜靜地躺著隙赁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梆暖。 梳的紋絲不亂的頭發(fā)上伞访,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音轰驳,去河邊找鬼厚掷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛级解,可吹牛的內(nèi)容都是我干的冒黑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蠕趁,長吁一口氣:“原來是場噩夢啊……” “哼薛闪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俺陋,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤豁延,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腊状,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诱咏,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年缴挖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袋狞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖苟鸯,靈堂內(nèi)的尸體忽然破棺而出同蜻,到底是詐尸還是另有隱情,我是刑警寧澤早处,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布湾蔓,位于F島的核電站,受9級特大地震影響砌梆,放射性物質(zhì)發(fā)生泄漏默责。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一咸包、第九天 我趴在偏房一處隱蔽的房頂上張望桃序。 院中可真熱鬧,春花似錦烂瘫、人聲如沸媒熊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泛释。三九已至,卻和暖如春温算,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背间影。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工注竿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魂贬。 一個(gè)月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓巩割,卻偏偏與公主長得像,于是被迫代替她去往敵國和親付燥。 傳聞我的和親對象是個(gè)殘疾皇子宣谈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353