es6新特性有:1、let和const;2、symbol;3、模板字串;4、解構表達式;5、物件方面,如Map和Set;6、函數方面,如參數預設值和箭頭函數;7、class關鍵字;8、promise和proxy;9、模組化;10、運算符。
#本教學操作環境: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();
記憶體解構圖
3、模板字串
- 在ES6之前,處理模板字串:
透過「\」和「 」來建構模板 - 對ES6來說:
用${}
來界定;
反引號(``)
直接搞定;
<script> url="xxxxxx" // es6之前 let html="<div>"+ " <a>"+url+""+ "</script>
非常好用
##3.1 字串新方法(補充)
- includes()
判斷字串是否包含參數字串,傳回boolean值。
- startsWith() / endsWith()
,判斷字串是否以參數字串開頭或結尾。傳回boolean值。這兩個方法可以有第二個參數,一個數字,表示開始尋找的位置。
let str = 'blue,red,orange,white';str.includes('blue'); //truestr.startsWith('blue'); //true str.endsWith('blue'); //false
- repeat()
方法依指定次數傳回一個新的字串。
console.log('hello'.repeat(2)); //'hellohello'
- padStart()/padEnd()
,用參數字串按給定長度從前面或後面補全字串,傳回新字串。
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、解構表達式
解構賦值是對賦值運算子的擴充。它是一種針對數組或物件進行模式匹配,然後對其中的變數進行賦值。
字串、以及ES6新增的Map和Set# 都可以使用解構表達式
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); //'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屬性,儲存了鍵值對的個數,而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物件類似,但它存儲不是鍵值對。類似數組,但它的
每個元素都是唯一的。
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 数组的新方法
- 新增的方法有:
-
Array.from()
是内置对象Array的方法,实例数组不能调用 -
includes()
参数:数值 -------- 返回值:true/false
-
map()
、filter()
参数:函数-------- 返回值:数组 -
forEach()
参数:函数-------- 返回值:undefined
-
find()
参数:函数-------- 返回值:数值 -
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)); //[ '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、函数方面
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('hi');}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
的本质依然是一个函数。
- 创建类
<script> class person { //关键字声明方式 constructor(name) { this.name=name } say() { console.log("hello"); } } var p = new person('p'); p.say(); //'hello' console.log(p.name);</script>
- 类的继承
类的继承通过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; //'admin' student.sex; //'male' student.say(); //'ren:12'</script>
8、promise和proxy
讲不清楚,等我学会了,后面在讲
9、模块化
- 导入
ES6使用关键字 import
导入模块(文件),有两种常用的方式:
import ‘模块名称’ from ‘路径’;import ‘路径’;
- 导出
ES6 通过 export 和export default 导出模块。
let name = 'ren',age = 12;export {name,age}; //注意:变量需要用大括号包裹,然后才能向外输出
模块化优点
1.防止命名冲突
2.复用性强
10、运算符
...
扩展运算符
可选链 ?.
函数绑定运算符::
若本文对你有帮助 点个赞 点个关注
总结——ES6思维导图
推荐学习:《react视频教程》
以上是es6新功能都有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!

React是構建交互式前端體驗的首選工具。 1)React通過組件化和虛擬DOM簡化UI開發。 2)組件分為函數組件和類組件,函數組件更簡潔,類組件提供更多生命週期方法。 3)React的工作原理依賴虛擬DOM和調和算法,提高性能。 4)狀態管理使用useState或this.state,生命週期方法如componentDidMount用於特定邏輯。 5)基本用法包括創建組件和管理狀態,高級用法涉及自定義鉤子和性能優化。 6)常見錯誤包括狀態更新不當和性能問題,調試技巧包括使用ReactDevTools和優

React是一個用於構建用戶界面的JavaScript庫,其核心是組件化和狀態管理。 1)通過組件化和狀態管理簡化UI開發。 2)工作原理包括調和和渲染,優化可通過React.memo和useMemo實現。 3)基本用法是創建並渲染組件,高級用法包括使用Hooks和ContextAPI。 4)常見錯誤如狀態更新不當,可使用ReactDevTools調試。 5)性能優化包括使用React.memo、虛擬化列表和CodeSplitting,保持代碼可讀性和可維護性是最佳實踐。

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

React組件可以通過函數或類定義,封裝UI邏輯並通過props接受輸入數據。 1)定義組件:使用函數或類,返回React元素。 2)渲染組件:React調用render方法或執行函數組件。 3)復用組件:通過props傳遞數據,構建複雜UI。組件的生命週期方法允許在不同階段執行邏輯,提升開發效率和代碼可維護性。

React嚴格模式是一種開發工具,可通過激活其他檢查和警告來突出反應應用中的潛在問題。它有助於識別遺產代碼,不安全的生命週期和副作用,鼓勵現代反應實踐。

本文討論了React的對帳過程,詳細介紹了它如何有效地更新DOM。關鍵步驟包括觸發對帳,創建虛擬DOM,使用擴散算法以及應用最小的DOM更新。它還覆蓋了經家


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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

Dreamweaver CS6
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具