近来重构了一个SPA项目,引入了部份ES6用法,最大的感觉是ES6让javascript这门言语变得越发严谨,越发轻易。本篇将连系实战经验,对最经常应用的部份ES6语法举行申明,并对照ES6之前的做法,谈谈应用ES6的优点。
模板字面量
在es6之前,在js中拼接字符串,能够如许:
let name = 'es6'
let str = 'Hello, ' + name + '.'
而在es6中,能够用应用反引号(`)来包裹一般字符串,以下:
let name = 'es6'
let str = `Hello, ${name}.`
用来拼接变量时照样很轻易的。
includes() 要领
在数组和字符串中,经常会碰到如许一个题目:推断该数组或字符串中是不是存在某个值。
在ES6之前,能够如许做:
let str = 'abcdef'
console.log(str.indexOf('b') > -1)
这固然没有题目,然则语义上显得不够直观,indexOf()要领是取得指定值的索引位置。经由过程该要领取得位置后还得比较一次才推断是不是存在。
我们再来看看ES6的作法:
let str = 'abcdef'
console.log(str.includes('b'))
显得越发清楚清楚明了。然则,假如推断某个值是不是在数组或字符串中存在,那末includes要领是异常轻易的,但假如要取得某个值的索引位置,照样indexOf要领更适宜。includes要领并非indexOf要领的替换。注重
:和indexOf()一样,includes()在数组和字符串中都能够应用。
扩大运算符
求最值
求最值是很罕见的一个操纵,我们先看看在ES6之前是怎样做的:
let arr = [25, 50, 999, 100]
console.log(Math.max.apply(Math, arr))
该要领是可行的,但应用 apply() 让人以为有一丝疑心,这里应用的分外语法殽杂了代码的实在企图。
再看看ES6的写法:
// Math.max() 不允许传入数组
// 所以我们用扩大运算符把数组中的值睁开成多个自力的值,再传入
console.log(Math.max(...arr))
如许的代码是不是是看起来清楚多了?而且扩大运算符还能够与其他参数混用,比方:
console.log(Math.max(...arr, 1000, 888))
数组去重
这是一个很高频的口试题目,ES6之前,能够如许:
function unique(arr) {
let temp = []
for (let i = 0; i < arr.length; i++) {
if (temp.includes(arr[i]) === false) {
temp.push(arr[i])
}
}
return temp
}
let numbers = [2, 2, 3, 6, 2, 3, 5]
console.log(unique(numbers))
固然数组去重有多种写法,我这里只枚举一个,供人人参考。
再来看看es6的写法:
let arr = [2, 2, 3, 6, 2, 3, 5]
arr = [...new Set(arr)]
console.log(arr)
应用数组来初始化一个Set,Set组织器能确保不反复地应用这些值。很明显,es6的写法更简洁清楚明了。
Vuex中的应用
export default {
computed: {
// 应用对象睁开运算符将 getter 混入 computed 对象中
...mapGetters([
'doneTodosCount',
'anotherGetter'
])
}
}
用过vuex的应当熟习如许一段代码,这里应用扩大运算符合营mapGetters 辅佐函数,会将上面代码剖析成以下情势:
export default {
computed: {
doneTodosCount () {},
anotherGetter () {}
}
}
对象的简写
现有一个对象组织函数,其返回一个对象,对象中包括属性和值,在es6之前,写法以下:
function createPerson (name, age) {
return {
name: name,
age: age
}
}
es6供应了简写体式格局,当对象的一个属性称号与当地变量名相同时,你能够简朴誊写称号而省略冒号与值。能够如许:
function createPerson (name, age) {
return {
name,
age
}
}
这个特征在vue单文件组件中会经常碰到,比方:
components: {
otherComponent
}
要领的简写
现有一个对象,对象中有一个要领,在es6之前,要领能够如许写:
var person = {
name: 'foo',
sayName: function () {
console.log(this.name)
}
}
es6供应了简写要领的写法,经由过程省略冒号与function关键字,你能够如许:
var person = {
name: 'foo',
sayName () {
console.log(this.name)
}
}
延长浏览
本文只列出了部份es6语法,关于有些特征,如promise,箭头函数,await等,在我的项目中也会频仍应用,但网上有很好的文章,就不细说了。下面供应链接,供有兴致的朋侪参考。
大白话解说Promise
ECMAScript 6 入门
明白 JavaScript 的 async/await
参考资料
ECMAScript 6 入门
Understanding ECMAScript 6
小结
ES6让js这门言语变得越发邃密,越发壮大。虽然不是非得控制es6才编程,然则控制部份特征能进步开辟效力。何乐而不为呢?这些都是我在项目中的应用心得,本文就当抛砖了。