溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

es6新特性怎么使用

發(fā)布時間:2023-01-06 14:40:45 來源:億速云 閱讀:110 作者:iii 欄目:web開發(fā)

這篇“es6新特性怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“es6新特性怎么使用”文章吧。

es6新特性有:1、let和const;2、symbol;3、模板字符串;4、解構(gòu)表達式;5、對象方面,如Map和Set;6、函數(shù)方面,如參數(shù)默認值和箭頭函數(shù);7、class關(guān)鍵字;8、promise和proxy;9、模塊化;10、運算符。

ES6新特性

1、let和const

2、symbol

Symbol是ES6中引入的一種新的基本數(shù)據(jù)類型,用于表示一個獨一無二的值,不能與其他數(shù)據(jù)類型進行運算。它是JavaScript中的第七種數(shù)據(jù)類型,與undefined、null、Number(數(shù)值)、String(字符串)、Boolean(布爾值)、Object(對象)并列。

你可以這樣創(chuàng)建一個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變量后,你就得到了一個在內(nèi)存中獨一無二的值?,F(xiàn)在除了通過變量a,任何人在任何作用域內(nèi)都無法重新創(chuàng)建出這個值

const a = Symbol();const b = Symbol();

內(nèi)存解構(gòu)圖
es6新特性怎么使用

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ù)組或者對象進行模式匹配,然后對其中的變量進行賦值。
字符串、以及ES6新增的MapSet 都可以使用解構(gòu)表達式

4.1 數(shù)組解構(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ù)組的新方法

  • 新增的方法有:

  1. Array.from()是內(nèi)置對象Array的方法,實例數(shù)組不能調(diào)用

  2. includes() 參數(shù):數(shù)值 -------- 返回值:true/false

  3. map()filter() 參數(shù):函數(shù)-------- 返回值:數(shù)組

  4. forEach() 參數(shù):函數(shù)-------- 返回值:undefined

  5. find() 參數(shù):函數(shù)-------- 返回值:數(shù)值

  6. 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()方法用于將所有可枚舉屬性的值從一個或多個源對象分配到目標(biāo)對象,并返回目標(biāo)對象。------難理解看實例
    對象合并

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 …(對象擴展符)

  1. 拷貝

<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>
  1. 合并對象

<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;
   //當(dāng)只有一個參數(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ù)。

  1. 創(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>
  1. 類的繼承
    類的繼承通過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、模塊化

  1. 導(dǎo)入

ES6使用關(guān)鍵字 import 導(dǎo)入模塊(文件),有兩種常用的方式:

import ‘模塊名稱’  from  ‘路徑’;import  ‘路徑’;
  1. 導(dǎo)出

ES6 通過 export 和export default 導(dǎo)出模塊。

let name = 'ren',age = 12;export {name,age};
//注意:變量需要用大括號包裹,然后才能向外輸出

模塊化優(yōu)點

  1.防止命名沖突
  2.復(fù)用性強

10、運算符

...擴展運算符
可選鏈 ?.
函數(shù)綁定運算符::

以上就是關(guān)于“es6新特性怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

es6
AI