目錄
3、模板字串" >3、模板字串
##3.1 字串新方法(補充)" >##3.1 字串新方法(補充)
4、解構表達式" >4、解構表達式
4.2 物件解構" >4.2 物件解構
5、物件面" >5、物件面
5.1 Map和Set" >5.1 Map和Set
5.1.1 Map" >5.1.1 Map
5.1.2 Set" >5.1.2 Set
5.3 数组的新方法" >5.3 数组的新方法
5.3.1 Array.from()方法" >5.3.1 Array.from()方法
5.3.2 includes()方法" >5.3.2 includes()方法
5.3.3 map()、filter() 方法" >5.3.3 map()、filter() 方法
5.3.4 forEach()方法" >5.3.4 forEach()方法
5.3.4 find()方法" >5.3.4 find()方法
5.3.6 some()、every() 方法" >5.3.6 some()、every() 方法
5.4 object的新方法" >5.4 object的新方法
5.4.1 Object.is()" >5.4.1 Object.is()
5.4.2 Object.assign()" >5.4.2 Object.assign()
5.4.3 Object.keys()、Object.values()、Object.entries()" >5.4.3 Object.keys()、Object.values()、Object.entries()
5.5 对象声明简写" >5.5 对象声明简写
5.6 …(对象扩展符)" >5.6 …(对象扩展符)
6、函数方面" >6、函数方面
6.1 参数默认值" >6.1 参数默认值
6.2 箭头函数" >6.2 箭头函数
6.3 箭头函数和普通函数最大的区别在于其内部this永远指向其父级对象的this。(重点)" >6.3 箭头函数和普通函数最大的区别在于其内部this永远指向其父级对象的this。(重点)
7、class(类)" >7、class(类)
8、promise和proxy" >8、promise和proxy
9、模块化" >9、模块化
首頁 web前端 前端問答 es6新功能都有哪些

es6新功能都有哪些

Jan 06, 2023 pm 02:15 PM
es6

es6新特性有:1、let和const;2、symbol;3、模板字串;4、解構表達式;5、物件方面,如Map和Set;6、函數方面,如參數預設值和箭頭函數;7、class關鍵字;8、promise和proxy;9、模組化;10、運算符。

es6新功能都有哪些

#本教學操作環境:Windows10系統、ECMAScript 6版、Dell G3電腦。

es6新功能都有哪些?

ES6新特性

#1、let和const

前面講過:https: //www.php.cn/js-tutorial-499866.html

2、symbol

Symbol是ES6中引入的一種新的基本資料類型,用來表示一個獨一無二的值,不能與其他資料類型運算。它是JavaScript中的第七種資料型別,與undefined、null、Number(數值)、String(字串)、Boolean(布林值)、Object(物件)並列。

你可以這樣建立一個Symbol值:

const a = Symbol();
console.log(a);  //Symbol()

//因为Symbol是基本数据类型,而不是对象,不能 new 。
const a = new Symbol();//报错,Symbol is not a constructor
登入後複製

使用Symbol()創建一個Symbol類型的值並賦值給a變數後,你就得到了一個在記憶體中獨一無二的值。現在除了透過變數a,任何人在任何作用域內都無法重新建立出這個值

const a = Symbol();const b = Symbol();
登入後複製

記憶體解構圖
es6新功能都有哪些

3、模板字串

  • 在ES6之前,處理模板字串:
    透過「\」和「 」來建構模板
  • 對ES6來說:
    ${}來界定;
    反引號(``)直接搞定;
<script>
      url="xxxxxx"
       // es6之前
       let html="<div>"+
                  " <a>"+url+"</a>"+
               "</div>";
		//es6
       let eshtml=`<div>
                   <a>${url}</a>
               </div>`</script>
登入後複製

非常好用

##3.1 字串新方法(補充)

  • includes()判斷字串是否包含參數字串,傳回boolean值。
  • startsWith() / endsWith(),判斷字串是否以參數字串開頭或結尾。傳回boolean值。這兩個方法可以有第二個參數,一個數字,表示開始尋找的位置。
  • let str = &#39;blue,red,orange,white&#39;;str.includes(&#39;blue&#39;);
    //truestr.startsWith(&#39;blue&#39;);
    //true
    str.endsWith(&#39;blue&#39;);
    //false
    登入後複製
  • repeat()方法依指定次數傳回一個新的字串。
  • console.log(&#39;hello&#39;.repeat(2));   
    //&#39;hellohello&#39;
    登入後複製
  • padStart()/padEnd(),用參數字串按給定長度從前面或後面補全字串,傳回新字串。
  • let arr = &#39;hell&#39;;console.log(arr.padEnd(5,&#39;o&#39;));  
    //&#39;hello&#39;console.log(arr.padEnd(6,&#39;o&#39;));  
    //&#39;helloo&#39;console.log(arr.padEnd(6));  
    //&#39;hell  &#39;,如果没有指定将用空格代替
    console.log(arr.padStart(5,&#39;o&#39;));  
    //&#39;ohell&#39;
    登入後複製

4、解構表達式

解構賦值是對賦值運算子的擴充。它是一種針對

數組物件進行模式匹配,然後對其中的變數進行賦值。
字串、以及ES6新增的MapSet# 都可以使用解構表達式

4.1 陣列解構
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 物件解構

物件的解構賦值和陣列類似,不過左邊的變數名稱需要使用物件的屬性名,並且用大括號{ }而非中括號[]

let obj = { 
	name: "ren", 
	age: 12, 
	sex: "male" };let { name, age, sex } = obj;console.log(name, age, sex); 
	//&#39;ren&#39; 12 &#39;male&#39;let { name: myName, age: myAge, sex: mySex } = obj; 
	//自定义变量名console.log(myName, myAge, mySex); 
	//&#39;ren&#39; 12 &#39;male&#39;
登入後複製

5、物件面

5.1 Map和Set

Map和Set屬於es6新增加的物件

5.1.1 Map

Map物件用來儲存鍵值對,任何值JavaScript支援的值都可以當作一個鍵(key)或者一個值(value)。

與物件不同的是

  • object的鍵只能是

    字串或ES6的symbol值,而Map可以是任何值。

  • Map物件有一個

    size屬性,儲存了鍵值對的個數,而object物件沒有類似屬性。

  • let myMap = new Map([[&#39;name&#39;,&#39;ren&#39;],[&#39;age&#39;,12]]);console.log(myMap);  
    //{&#39;name&#39;=>&#39;ren&#39;,&#39;age&#39;=>12}myMap.set(&#39;sex&#39;,&#39;male&#39;);console.log(myMap);  
    //{&#39;name&#39;=>&#39;ren&#39;,&#39;age&#39;=>12,&#39;sex&#39;=>&#39;male&#39;}console.log(myMap.size);  
    //3myMap.get(&#39;name&#39;);  //&#39;ren&#39;myMap.has(&#39;age&#39;); 
     //truemyMap.delete(&#39;age&#39;);  
     //truemyMap.has(&#39;age&#39;);  
     //falsemyMap.get(&#39;age&#39;);  
     //undefined
    登入後複製

5.1.2 Set

可以理解為後端的Set集合物件

Set物件和Map物件類似,但它存儲不是鍵值對。類似數組,但它的
每個元素都是唯一的

let mySet = new Set([1,2,3]);
//里面要传一个数组,否则会报错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物件

唯一性的特點,可以輕鬆實現數組的去重#

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 数组的新方法

  • 新增的方法有:
  1. Array.from()是内置对象Array的方法,实例数组不能调用
  2. includes() 参数:数值 -------- 返回值:true/false
  3. map()filter() 参数:函数-------- 返回值:数组
  4. forEach() 参数:函数-------- 返回值:undefined
  5. find() 参数:函数-------- 返回值:数值
  6. some()every() 参数:函数-------- 返回值:true/false

5.3.1 Array.from()方法

Array.from()方法可以将可迭代对象转换为新的数组。

  • 函数可接受3个参数(后两个参数可以没有):
    • 第一个表示将被转换的可迭代对象(如果只有一个参数就是把形参转变成数组)
    • 第二个是回调函数,将对每个数组元素应用该回调函数,然后返回新的值到新数组,
    • 第三个是回调函数内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()方法

参数:数值 -------- 返回值:true/false
includes()方法------是查看数组中是否存在这个元素,存在就返回true,不存在就返回false

let arr = [1,33,44,22,6,9]let ary = arr.includes(22)console.log(ary)
登入後複製

5.3.3 map()、filter() 方法

参数:函数-------- 返回值:数组
map()方法-----要利用原数组经过运算后的数组,或者从对象数组中拿某个属性
filter()方法------是将符合挑选的筛选出来成为一个新数组,新数组不会影响旧数组。

<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()方法

参数:函数-------- 返回值:undefined

forEach() 方法------是循环遍历数组中的每一项,没有返回值

find()方法---------是查找数组中符合条件的第一个元素,直接将这个元素返回出来

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()方法

参数:函数-------- 返回值:数值

find()方法----------是查找数组中符合条件的第一个元素,直接将这个元素返回出来

let arr = [1,33,44,2,6,9]let a= arr.find(v => v > 10)console.log(a) // 33
登入後複製

5.3.6 some()、every() 方法

参数:函数-------- 返回值:true/false

some()方法------找到一个符合条件的就返回true,所有都不符合返回false
every()方法------数组所有值都符合条件才会返回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() 返回多个数组,每个数组是 key–value
    不解释直接看例子
<script>
	let person = {
		name: "admin",
		age: 12,
		language: ["java", "js", "css"],
	};
	console.log(Object.keys(person)); //[ &#39;name&#39;, &#39;age&#39;, &#39;language&#39; ]
	
	console.log(Object.values(person)); //[ &#39;admin&#39;, 12, [ &#39;java&#39;, &#39;js&#39;, &#39;css&#39; ] ]
	
	console.log(Object.entries(person));    /* [
	                                                     ["name", "admin"],
	                                                     ["age", 12],
	                                                     ["language", ["java", "js", "css"]],
	                                                 ]; */</script>
登入後複製

5.5 对象声明简写

<script>
			
      let name =&#39;admin&#39;
      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: &#39;admin&#39;, 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、函数方面

6.1 参数默认值

<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 箭头函数

箭头函数实现了一种更加简洁的书写方式。箭头函数内部没有arguments,也没有prototype属性,所以不能用new关键字调用箭头函数。

let add = (a,b) => {
    return a+b;}let print = () => {
    console.log(&#39;hi&#39;);}let fn = a => a * a;
    //当只有一个参数时,括号可以省略,函数体只有单行return语句时,大括号也可以省略。
登入後複製

6.3 箭头函数和普通函数最大的区别在于其内部this永远指向其父级对象的this。(重点)

 var age = 123;
 let obj = {
     age:456,
     say:() => {
         console.log(this.age);  //this指向window
     }
 };obj.say();   //123
登入後複製

7、class(类)

class 作为对象的模板被引入ES6,你可以通过 class 关键字定义类。class 的本质依然是一个函数。

  1. 创建类
<script>
	class person {
		//关键字声明方式
		constructor(name) {
                  this.name=name              }           
		say() {
			console.log("hello");
		}
	}

	var p = new person(&#39;p&#39;);
	p.say(); //&#39;hello&#39;
	console.log(p.name);</script>
登入後複製
  1. 类的继承
    类的继承通过extends关键字实现。
    子类必须在constructor中调用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;   //&#39;admin&#39;
	student.sex;    //&#39;male&#39;
	student.say(); //&#39;ren:12&#39;</script>
登入後複製

8、promise和proxy

讲不清楚,等我学会了,后面在讲

9、模块化

  1. 导入

ES6使用关键字 import 导入模块(文件),有两种常用的方式:

import ‘模块名称’  from  ‘路径’;import  ‘路径’;
登入後複製
  1. 导出

ES6 通过 export 和export default 导出模块。

let name = &#39;ren&#39;,age = 12;export {name,age};
//注意:变量需要用大括号包裹,然后才能向外输出
登入後複製

模块化优点

  1.防止命名冲突
登入後複製
  2.复用性强
登入後複製

10、运算符

... 扩展运算符
可选链 ?.
函数绑定运算符::


若本文对你有帮助 点个赞 点个关注


总结——ES6思维导图

es6新功能都有哪些

推荐学习:《react视频教程

以上是es6新功能都有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

ES6怎麼求數組反轉 ES6怎麼求數組反轉 Oct 26, 2022 pm 06:19 PM

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

async是es6還是es7的 async是es6還是es7的 Jan 29, 2023 pm 05:36 PM

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

es6怎麼找出2個數組中不同項 es6怎麼找出2個數組中不同項 Nov 01, 2022 pm 06:07 PM

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

小程式為什麼要將es6轉es5 小程式為什麼要將es6轉es5 Nov 21, 2022 pm 06:15 PM

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

es5和es6怎麼實現陣列去重 es5和es6怎麼實現陣列去重 Jan 16, 2023 pm 05:09 PM

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

es6暫時性死區是什麼意思 es6暫時性死區是什麼意思 Jan 03, 2023 pm 03:56 PM

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

require是es6語法嗎 require是es6語法嗎 Oct 21, 2022 pm 04:09 PM

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

es6 map有序嗎 es6 map有序嗎 Nov 03, 2022 pm 07:05 PM

map是有序的。 ES6中的map類型是一種儲存著許多鍵值對的有序列表,其中的鍵名和對應的值支持所有數據類型;鍵名的等價性判斷是通過調用“Objext.is()”方法來實現的,所以數字5與字串「5」會被判定為兩種類型,可以分別作為兩種獨立的鍵出現在程式中。

See all articles