es6新特性有:1、let和const;2、symbol;3、模板字串;4、解構(gòu)表達式;5、物件方面,如Map和Set;6、函數(shù)方面,如參數(shù)預(yù)設(shè)值和箭頭函數(shù);7、class關(guān)鍵字;8、promise和proxy;9、模組化;10、運算符。
#本教學操作環(huán)境:Windows10系統(tǒng)、ECMAScript 6版、Dell G3電腦。
es6新功能都有哪些?
ES6新特性
#1、let和const
前面講過:https: //m.miracleart.cn/js-tutorial-499866.html
2、symbol
Symbol是ES6中引入的一種新的基本資料類型,用來表示一個獨一無二的值,不能與其他資料類型運算。它是JavaScript中的第七種資料型別,與undefined、null、Number(數(shù)值)、String(字串)、Boolean(布林值)、Object(物件)並列。
你可以這樣建立一個Symbol值:
const a = Symbol(); console.log(a); //Symbol() //因為Symbol是基本數(shù)據(jù)類型,而不是對象,不能 new 。 const a = new Symbol();//報錯,Symbol is not a constructor
使用Symbol()創(chuàng)建一個Symbol類型的值並賦值給a變數(shù)後,你就得到了一個在記憶體中獨一無二的值?,F(xiàn)在除了透過變數(shù)a,任何人在任何作用域內(nèi)都無法重新建立出這個值
const a = Symbol();const b = Symbol();
記憶體解構(gòu)圖
3、模板字串
- 在ES6之前,處理模板字串:
透過「\」和「 」來建構(gòu)模板 - 對ES6來說:
用${}
來界定;
反引號(``)
直接搞定;
<script> url="xxxxxx" // es6之前 let html="<div>"+ " <a>"+url+"</a>"+ "</div>"; //es6 let eshtml=`<div> <a>${url}</a> </div>`</script>
非常好用
##3.1 字串新方法(補充)
- includes()
判斷字串是否包含參數(shù)字串,傳回boolean值。
- startsWith() / endsWith()
,判斷字串是否以參數(shù)字串開頭或結(jié)尾。傳回boolean值。這兩個方法可以有第二個參數(shù),一個數(shù)字,表示開始尋找的位置。
let str = 'blue,red,orange,white';str.includes('blue'); //truestr.startsWith('blue'); //true str.endsWith('blue'); //false
- repeat()
方法依指定次數(shù)傳回一個新的字串。
console.log('hello'.repeat(2)); //'hellohello'
- padStart()/padEnd()
,用參數(shù)字串按給定長度從前面或後面補全字串,傳回新字串。
let arr = 'hell';console.log(arr.padEnd(5,'o')); //'hello'console.log(arr.padEnd(6,'o')); //'helloo'console.log(arr.padEnd(6)); //'hell ',如果沒有指定將用空格代替 console.log(arr.padStart(5,'o')); //'ohell'
4、解構(gòu)表達式
解構(gòu)賦值是對賦值運算子的擴充。它是一種針對數(shù)組或物件進行模式匹配,然後對其中的變數(shù)進行賦值。
字串、以及ES6新增的Map和Set# 都可以使用解構(gòu)表達式
4.1 陣列解構(gòu)let [a,b,c] = [1,2,3];console.log(a,b,c); //1,2,3
let [a,b,c] = [1,,3];console.log(a,b,c); //1,undefined,3
let [a,,b] = [1,2,3];console.log(a,b);//1,3
let [a,..b] = [1,2,3];
//...是剩余運算符,表示賦值運算符右邊除第一個值外剩余的都賦值給b
console.log(a,b);
//1,[2,3]
4.2 物件解構(gòu)
物件的解構(gòu)賦值和陣列類似,不過左邊的變數(shù)名稱需要使用物件的屬性名,並且用大括號{ }而非中括號[]let obj = { name: "ren", age: 12, sex: "male" };let { name, age, sex } = obj;console.log(name, age, sex); //'ren' 12 'male'let { name: myName, age: myAge, sex: mySex } = obj; //自定義變量名console.log(myName, myAge, mySex); //'ren' 12 'male'
5、物件面
5.1 Map和Set
Map和Set屬於es6新增加的物件5.1.1 Map
Map物件用來儲存鍵值對,任何值JavaScript支援的值都可以當作一個鍵(key)或者一個值(value)。 與物件不同的是
- object的鍵只能是
字串或ES6的symbol值,而Map可以是任何值。
- Map物件有一個
size屬性,儲存了鍵值對的個數(shù),而object物件沒有類似屬性。
let myMap = new Map([['name','ren'],['age',12]]);console.log(myMap); //{'name'=>'ren','age'=>12}myMap.set('sex','male');console.log(myMap); //{'name'=>'ren','age'=>12,'sex'=>'male'}console.log(myMap.size); //3myMap.get('name'); //'ren'myMap.has('age'); //truemyMap.delete('age'); //truemyMap.has('age'); //falsemyMap.get('age'); //undefined
5.1.2 Set
可以理解為後端的Set集合物件 Set物件和Map物件類似,但它存儲不是鍵值對。類似數(shù)組,但它的
每個元素都是唯一的。
let mySet = new Set([1,2,3]); //里面要傳一個數(shù)組,否則會報錯console.log(mySet); //{1,2,3}mySet.add(4);console.log(mySet); //{1,2,3,4}mySet.delete(1); //truemySet.has(1); //falseconsole.log(mySet); //{2,3,4}利用Set物件
唯一性的特點,可以輕鬆實現(xiàn)數(shù)組的去重#
let arr = [1,1,2,3,4,4];let mySet = new Set(arr); let newArr = Array.from(mySet);console.log(newArr); //[1,2,3,4]
5.3 數(shù)組的新方法
- 新增的方法有:
Array.from()
是內(nèi)置對象Array的方法,實例數(shù)組不能調(diào)用includes()
參數(shù):數(shù)值 -------- 返回值:true/false
map()
、filter()
參數(shù):函數(shù)-------- 返回值:數(shù)組forEach()
參數(shù):函數(shù)-------- 返回值:undefined
find()
參數(shù):函數(shù)-------- 返回值:數(shù)值some()
、every()
參數(shù):函數(shù)-------- 返回值:true/false
5.3.1 Array.from()方法
Array.from()
方法可以將可迭代對象轉(zhuǎn)換為新的數(shù)組。
- 函數(shù)可接受3個參數(shù)(后兩個參數(shù)可以沒有):
- 第一個表示將被轉(zhuǎn)換的可迭代對象(如果只有一個參數(shù)就是把形參轉(zhuǎn)變成數(shù)組)
- 第二個是回調(diào)函數(shù),將對每個數(shù)組元素應(yīng)用該回調(diào)函數(shù),然后返回新的值到新數(shù)組,
- 第三個是回調(diào)函數(shù)內(nèi)this的指向。
let arr = [1, 2, 3];let obj = { double(n) { return n * 2; }}console.log(Array.from(arr, function (n){ return this.double(n);}, obj)); // [2, 4, 6]
5.3.2 includes()方法
參數(shù):數(shù)值 -------- 返回值:true/false
includes()
方法------是查看數(shù)組中是否存在這個元素,存在就返回true,不存在就返回false
let arr = [1,33,44,22,6,9]let ary = arr.includes(22)console.log(ary)
5.3.3 map()、filter() 方法
參數(shù):函數(shù)-------- 返回值:數(shù)組map()
方法-----要利用原數(shù)組經(jīng)過運算后的數(shù)組,或者從對象數(shù)組中拿某個屬性filter()
方法------是將符合挑選的篩選出來成為一個新數(shù)組,新數(shù)組不會影響舊數(shù)組。
<script> let arr = [1, 33, 44, 2, 6, 9]; let newarr1 = arr.filter((v) => v > 10); //newarr1-------[33, 44] let newarr2 = arr.filter((v) => v * 2); //newarr2-------[1, 33, 44, 2, 6, 9] let newarr3 = arr.map((v) => v > 10); //newarr3-------[false, true, true, false, false, false] let newarr4 = arr.map((v) => v * 2); //newarr4------- [2, 66, 88, 4, 12, 18]</script>
5.3.4 forEach()方法
參數(shù):函數(shù)-------- 返回值:undefined
forEach()
方法------是循環(huán)遍歷數(shù)組中的每一項,沒有返回值
find()
方法---------是查找數(shù)組中符合條件的第一個元素,直接將這個元素返回出來
let arr = [1,33,44,2,6,9]let a1= []arr.forEach((v, i)=>{ if (v > 10) { a1.push(arr[i]) } })console.log(a1) [33,44]let a2= arr.find(v => v > 10)console.log(a2)
5.3.4 find()方法
參數(shù):函數(shù)-------- 返回值:數(shù)值
find()
方法----------是查找數(shù)組中符合條件的第一個元素,直接將這個元素返回出來
let arr = [1,33,44,2,6,9]let a= arr.find(v => v > 10)console.log(a) // 33
5.3.6 some()、every() 方法
參數(shù):函數(shù)-------- 返回值:true/false
some()
方法------找到一個符合條件的就返回true
,所有都不符合返回false
。every()
方法------數(shù)組所有值都符合條件才會返回true
,有一個不符合返回false
。
let arr = [1,2,3,4,6,11]let newarr = arr.some(function(v){ return v > 10})console.log(newarr) //truelet newarr2 = arr.every(function(v){ return v > 10})console.log(newarr2) //false
5.4 object的新方法
在 ES6 中,添加了Object.is()
、Object.assign()
、Object.keys()
、Object.values()
、Object.entries()
等方法。
5.4.1 Object.is()
Object.is()
方法用來判斷兩個值是否為同一個值,返回一個布爾類型的值。
const obj1 = {};const obj2 = {};console.log(Object.is(obj1, obj2)); // falseconst obj3 = {};const value1 = obj3;const value2 = obj4;console.log(Object.is(value1, value2)); // true
5.4.2 Object.assign()
Object.assign()
方法用于將所有可枚舉屬性的值從一個或多個源對象分配到目標對象,并返回目標對象。------難理解看實例
對象合并
const obj1 = { a: 1 };const obj2 = { b: 2 };const obj3 = { a:5 , c: 3 };//對象合并,把后面對像合并到第一個對象,對象里相同的屬性會覆蓋Object.assign(obj1, obj2, obj3);console.log(obj1); // { a: 5, b: 2 , c:3}
5.4.3 Object.keys()、Object.values()、Object.entries()
- Object.keys() 返回對象所有屬性
- Object.values() 返回對象所有屬性值
- Object.entries() 返回多個數(shù)組,每個數(shù)組是 key–value
不解釋直接看例子
<script> let person = { name: "admin", age: 12, language: ["java", "js", "css"], }; console.log(Object.keys(person)); //[ 'name', 'age', 'language' ] console.log(Object.values(person)); //[ 'admin', 12, [ 'java', 'js', 'css' ] ] console.log(Object.entries(person)); /* [ ["name", "admin"], ["age", 12], ["language", ["java", "js", "css"]], ]; */</script>
5.5 對象聲明簡寫
<script> let name ='admin' let age = 20 //es6之前 // let person={ // name:name, // age:age // } //es6 聲明對象時的屬性名與引用的變量名相同就可以省略 let person={ name, age }</script>
5.6 …(對象擴展符)
- 拷貝
<script> let person={ name: "admin", age: 12, wife:"迪麗熱巴" } let person2={...person} console.log(person2===person);//false console.log(person2); //{name: 'admin', age: 12, wife: "迪麗熱巴"} </script>
- 合并對象
<script> const obj1 = { a: 1 }; const obj2 = { b: 2 }; const obj3 = { a: 5, c: 3 }; let newObj ={...obj1,...obj2,...obj3} console.log(newObj); // { a: 5, b: 2 , c:3} </script>
6、函數(shù)方面
6.1 參數(shù)默認值
<script> // es6之前 // function add(a, b) { // if(!a) a=0 // if(!b) b=0 // return a + b; // } //es6 function add(a = 0, b = 0) { return a + b; } let x=add(); let y=add(2); let z=add(3, 4); console.log(x,y,z); //x=0, y=2, z=7</script>
6.2 箭頭函數(shù)
箭頭函數(shù)實現(xiàn)了一種更加簡潔的書寫方式。箭頭函數(shù)內(nèi)部沒有arguments
,也沒有prototype
屬性,所以不能用new
關(guān)鍵字調(diào)用箭頭函數(shù)。
let add = (a,b) => { return a+b;}let print = () => { console.log('hi');}let fn = a => a * a; //當只有一個參數(shù)時,括號可以省略,函數(shù)體只有單行return語句時,大括號也可以省略。
6.3 箭頭函數(shù)和普通函數(shù)最大的區(qū)別在于其內(nèi)部this永遠指向其父級對象的this。(重點)
var age = 123; let obj = { age:456, say:() => { console.log(this.age); //this指向window } };obj.say(); //123
7、class(類)
class
作為對象的模板被引入ES6,你可以通過 class
關(guān)鍵字定義類。class
的本質(zhì)依然是一個函數(shù)。
- 創(chuàng)建類
<script> class person { //關(guān)鍵字聲明方式 constructor(name) { this.name=name } say() { console.log("hello"); } } var p = new person('p'); p.say(); //'hello' console.log(p.name);</script>
- 類的繼承
類的繼承通過extends
關(guān)鍵字實現(xiàn)。
子類必須在constructor
中調(diào)用super()
<script> class Person { constructor(name, age) { this.name = name; this.age = age; } say() { console.log(this.name + ":" + this.age); } } class Student extends Person { constructor(name, age, sex) { super(name, age); this.sex = sex; } } var student = new Student("admin", 12, "male"); student.name; //'admin' student.sex; //'male' student.say(); //'ren:12'</script>
8、promise和proxy
講不清楚,等我學會了,后面在講
9、模塊化
- 導入
ES6使用關(guān)鍵字 import
導入模塊(文件),有兩種常用的方式:
import ‘模塊名稱’ from ‘路徑’;import ‘路徑’;
- 導出
ES6 通過 export 和export default 導出模塊。
let name = 'ren',age = 12;export {name,age}; //注意:變量需要用大括號包裹,然后才能向外輸出
模塊化優(yōu)點
1.防止命名沖突
2.復(fù)用性強
10、運算符
...
擴展運算符
可選鏈 ?.
函數(shù)綁定運算符::
若本文對你有幫助 點個贊 點個關(guān)注
總結(jié)——ES6思維導圖
推薦學習:《react視頻教程》
以上是es6新功能都有哪些的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在ES6中,可以利用數(shù)組物件的reverse()方法來實現(xiàn)數(shù)組反轉(zhuǎn),該方法用於顛倒數(shù)組中元素的順序,將最後一個元素放在第一位,而第一個元素放在最後,語法「array.reverse()」。 reverse()方法會修改原始數(shù)組,如果不想修改需要配合擴充運算子「...」使用,語法「[...array].reverse()」。

async是es7的。 async和await是ES7中新增內(nèi)容,是對於非同步操作的解決方案;async/await可以說是co模組和生成器函數(shù)的語法糖,用更清晰的語意解決js非同步程式碼。 async顧名思義是「非同步」的意思,async用於聲明一個函數(shù)是異步的;async和await有一個嚴格規(guī)定,兩者都離不開對方,且await只能寫在async函數(shù)中。

為了瀏覽器相容。 ES6作為JS的新規(guī)範,加入了許多新的語法和API,但現(xiàn)代瀏覽器對ES6新特性支援不高,所以需將ES6程式碼轉(zhuǎn)換為ES5程式碼。在微信web開發(fā)者工具中,會預(yù)設(shè)使用babel將開發(fā)者ES6語法程式碼轉(zhuǎn)換為三端都能很好支援的ES5的程式碼,幫助開發(fā)者解決環(huán)境不同所帶來的開發(fā)問題;只需要在專案中配置勾選好「ES6轉(zhuǎn)ES5」選項即可。

步驟:1、將兩個陣列分別轉(zhuǎn)換為set類型,語法「newA=new Set(a);newB=new Set(b);」;2、利用has()和filter()求差集,語法“ new Set([...newA].filter(x =>!newB.has(x)))”,差集元素會被包含在一個set集合中返回;3、利用Array.from將集合轉(zhuǎn)為數(shù)組類型,語法“Array.from(集合)”。

es5中可以利用for語句和indexOf()函數(shù)來實現(xiàn)數(shù)組去重,語法“for(i=0;i<數(shù)組長度;i++){a=newArr.indexOf(arr[i]);if(a== -1){...}}」。在es6中可以利用擴充運算子、Array.from()和Set來去重;需要先將陣列轉(zhuǎn)為Set物件來去重,然後利用擴充運算子或Array.from()函數(shù)來將Set物件轉(zhuǎn)回數(shù)組即可。

在es6中,暫時性死區(qū)是語法錯誤,是指let和const命令使區(qū)塊形成封閉的作用域。在程式碼區(qū)塊內(nèi),使用let/const指令宣告變數(shù)之前,變數(shù)都是不可用的,在變數(shù)宣告之前屬於該變數(shù)的「死區(qū)」;這在語法上,稱為「暫時性死區(qū)」。 ES6規(guī)定暫時性死區(qū)和let、const語句不出現(xiàn)變量提升,主要是為了減少運行時錯誤,防止在變量聲明前就使用這個變量,從而導致意料之外的行為。

不是,require是CommonJS規(guī)範的模組化語法;而es6規(guī)範的模組化語法是import。 require是運行時加載,import是編譯時加載;require可以寫在程式碼的任意位置,import只能寫在文件的最頂端且不可在條件語句或函數(shù)作用域中使用;require運行時才引入模組的屬性所以效能相對較低,import編譯時引入模組的屬性所所以效能稍高。

在es6中,可以利用array物件的length屬性來判斷數(shù)組裡總共有多少項,即取得數(shù)組中元素的個數(shù);該屬性可傳回數(shù)組中元素的數(shù)組,只需要使用「array.length」語句即可傳回表示數(shù)組物件的元素個數(shù)的數(shù)值,也就是長度值。
