ES6常用新特性

創(chuàng)新互聯(lián)公司是專業(yè)的加格達(dá)奇網(wǎng)站建設(shè)公司,加格達(dá)奇接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行加格達(dá)奇網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
1. let && const
let 命令也用于變量聲明,但是作用域?yàn)榫植?
{
let a = 10;
var b = 1;
}
在函數(shù)外部可以獲取到b,獲取不到a,因此例如for循環(huán)計(jì)數(shù)器就適合使用let。
const用于聲明一個(gè)常量,設(shè)定后值不會(huì)再改變
const PI = 3.1415;
PI // 3.1415
PI = 3; //TypeError: Assignment to constant variable.2. 解構(gòu)賦值
ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)。
例如數(shù)組:
let [a, b, c] = [1, 2, 3];
//等同于
let a = 1;
let b = 2;
let c = 3;
這真的讓代碼看起來更優(yōu)美,有種python賦值的既視感。
對(duì)象的解構(gòu)賦值:獲取對(duì)象的多個(gè)屬性并且使用一條語句將它們賦給多個(gè)變量。
var {
StyleSheet,
Text,
View
} = React;
等同于
var StyleSheet = React.StyleSheet;
var Text = React.Text;
var View = React.Text;3. 箭頭函數(shù)
ES6中新增箭頭操作符用于簡(jiǎn)化函數(shù)的寫法,操作符左邊為參數(shù),右邊為具體操作和返回值。
var sum = (num1, num2) => { return num1 + num2; }
//等同于
var sum = function(num1, num2) {
return num1 + num2;
};
箭頭函數(shù)還修復(fù)了this的指向,使其永遠(yuǎn)指向詞法作用域:
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth; // 1990
var fn = () => new Date().getFullYear() - this.birth; // this指向obj對(duì)象
return fn();
}
};
obj.getAge(); // 254. ...操作符
這個(gè)的引入幾乎不會(huì)用到extend這個(gè)函數(shù)來。通過它可以將數(shù)組作為參數(shù)直接傳入函數(shù):
var people = ['Lily', 'Lemon', 'Terry'];
function sayHello(people1,people2,people3){
console.log(`Hello ${people1},${people2},${people3}`);
}
sayHello(...people);//輸出:Hello Lily,Lemon,Terry5. iterable類型
為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型,Array、Map和Set都屬于iterable類型,具有iterable類型的集合可以通過新的for … of循環(huán)來遍歷。
var a = ['A', 'B', 'C'];
var s = new Set(['A', 'B', 'C']);
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
for (var x of a) { // 遍歷Array
alert(x);
}
for (var x of s) { // 遍歷Set
alert(x);
}
for (var x of m) { // 遍歷Map
alert(x[0] + '=' + x[1]);
}
Map相關(guān)操作如下, Set同理:
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined6.類
ES6提供了更接近傳統(tǒng)語言的寫法,引入了Class(類)這個(gè)概念,作為對(duì)象的模板。通過class關(guān)鍵字,可以定義類,與多數(shù)傳統(tǒng)語言類似。
//定義類
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}ES7常用新特性
1. Array.prototype.includes
在一個(gè)數(shù)組或者列表中檢查是否存在一個(gè)值
let arr = ['react', 'angular', 'vue']
// Correct
if (arr.includes('react')) {
console.log('Can use React')
}
還能在字符串中使用includes:
let str = 'React Quickly'
// Correct
if (str.toLowerCase().includes('react')) { // true
console.log('Found "react"')
}
除了增強(qiáng)了可讀性語義化,實(shí)際上給開發(fā)者返回布爾值,而不是匹配的位置。
includes也可以在NaN(非數(shù)字)使用。最后 ,includes第二可選參數(shù)fromIndex,這對(duì)于優(yōu)化是有好處的,因?yàn)樗试S從特定位置開始尋找匹配。
更多例子:
console.log([1, 2, 3].includes(2)) // === true)
console.log([1, 2, 3].includes(4)) // === false)
console.log([1, 2, NaN].includes(NaN)) // === true)
console.log([1, 2, -0].includes(+0)) // === true)
console.log([1, 2, +0].includes(-0)) // === true)
console.log(['a', 'b', 'c'].includes('a')) // === true)
console.log(['a', 'b', 'c'].includes('a', 1)) // === false)2.Exponentiation Operator(求冪運(yùn)算)
et a = 7 ** 12 let b = 2 ** 7 console.log(a === Math.pow(7,12)) // true console.log(b === Math.pow(2,7)) // true 開發(fā)者還可以操作結(jié)果: let a = 7 a **= 12 let b = 2 b **= 7 console.log(a === Math.pow(7,12)) // true console.log(b === Math.pow(2,7)) // true
ES8新特性
1、Object.values/Object.entries
ES5 引入了Object.keys方法,返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵名。
Object.values方法返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵值。
Object.entries方法返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷( enumerable )屬性的鍵值對(duì)數(shù)組。
let {keys, values, entries} = Object;
let obj = { a: 1, b: 2, c: 3 };
for (let key of keys(obj)) {
console.log(key); // 'a', 'b', 'c'
}
for (let value of values(obj)) {
console.log(value); // 1, 2, 3
}
for (let [key, value] of entries(obj)) {
console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
}2. String padding(字符串填充)
3. Async/Await
使用Promise
使用Promise寫異步代碼,會(huì)比較麻煩:
axios.get(`/q?query=${query}`)
.then(response => response.data)
.then(data =>
{
this.props.processfetchedData(data);
})
.catch(error => console.log(error));
使用Async/Await
Async/Await使得異步代碼看起來像同步代碼,這正是它的魔力所在:
async fetchData(query) =>
{
try
{
const response = await axios.get(`/q?query=${query}`);
const data = response.data;
return data;
}
catch (error)
{
console.log(error)
}
}
fetchData(query).then(data =>
{
this.props.processfetchedData(data)
})Async/Await是寫異步代碼的新方式,以前的方法有回調(diào)函數(shù)和Promise。相比于Promise,它更加簡(jiǎn)潔,并且處理錯(cuò)誤、條件語句、中間值都更加方便
當(dāng)前文章:ES6、ES7和ES8有什么常用的特性總結(jié)
URL地址:http://chinadenli.net/article22/iicocc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、品牌網(wǎng)站制作、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)