ES6经常运用新特征
1. let && const
let 敕令也用于变量声明,然则作用域为部分
{
let a = 10;
var b = 1;
}
在函数外部能够猎取到b,猎取不到a,因而比方for轮回计数器就合适运用let。
const用于声明一个常量,设定后值不会再转变
const PI = 3.1415;
PI // 3.1415
PI = 3; //TypeError: Assignment to constant variable.
2. 解构赋值
ES6 许可根据肯定形式,从数组和对象中提取值,对变量举行赋值,这被称为解构(Destructuring)。
比方数组:
let [a, b, c] = [1, 2, 3];
//等同于
let a = 1;
let b = 2;
let c = 3;
这真的让代码看起来更幽美,有种python赋值的既视感。
对象的解构赋值:猎取对象的多个属性而且运用一条语句将它们赋给多个变量。
var {
StyleSheet,
Text,
View
} = React;
等同于
var StyleSheet = React.StyleSheet;
var Text = React.Text;
var View = React.View;
3. 箭头函数
ES6中新增箭头操纵符用于简化函数的写法,操纵符左侧为参数,右侧为具体操纵和返回值。
var sum = (num1, num2) => { return num1 + num2; }
//等同于
var sum = function(num1, num2) {
return num1 + num2;
};
箭头函数还修复了this的指向,使其永久指向词法作用域:
var obj = {
birth: 1990,
getAge: function () {
var b = this.birth; // 1990
var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
return fn();
}
};
obj.getAge(); // 25
4. …操纵符
这个的引入几乎不会用到extend这个函数来。经由过程它能够将数组作为参数直接传入函数:
var people = ['Lily', 'Lemon', 'Terry'];
function sayHello(people1,people2,people3){
console.log(`Hello ${people1},${people2},${people3}`);
}
sayHello(...people);//输出:Hello Lily,Lemon,Terry
5. iterable范例
为了一致鸠合范例,ES6规范引入了新的iterable范例,Array、Map和Set都属于iterable范例,具有iterable范例的鸠合能够经由过程新的for … of轮回来遍历。
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相干操纵以下, 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'); // undefined
6.类
ES6供应了更靠近传统言语的写法,引入了Class(类)这个观点,作为对象的模板。经由过程class关键字,能够定义类,与多半传统言语相似。
//定义类
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return '(' + this.x + ', ' + this.y + ')';
}
}
7.Set
var arr = [1,2,3,3,3,3,14]
var set = new Set(arr)
var arr = Array.from(set)
console.log(arr) // 1,2,3,14
ES7经常运用新特征
1. Array.prototype.includes
在一个数组或许列表中搜检是不是存在一个值
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"')
}
除了增强了可读性语义化,实际上给开发者返回布尔值,而不是婚配的位置。
includes也能够在NaN(非数字)运用。末了 ,includes第二可选参数fromIndex,这关于优化是有优点的,由于它许可从特定位置最先寻觅婚配。
更多例子:
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(求幂运算)
et a = 7 ** 12
let b = 2 ** 7
console.log(a === Math.pow(7,12)) // true
console.log(b === Math.pow(2,7)) // true
开发者还能够操纵效果:
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要领,返回一个数组,成员是参数对象本身的(不含继续的)一切可遍历( enumerable )属性的键名。
Object.values要领返回一个数组,成员是参数对象本身的(不含继续的)一切可遍历( enumerable )属性的键值。
Object.entries要领返回一个数组,成员是参数对象本身的(不含继续的)一切可遍历( enumerable )属性的键值对数组。
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写异步代码,会比较贫苦:
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是写异步代码的新体式格局,之前的要领有回调函数和Promise。比拟于Promise,它越发简约,而且处置惩罚毛病、前提语句、中心值都越发轻易