let关键字
相对于var声明的变量,let会相对严格,如果let的变量已存在就直接抛出错误而不是覆盖
const关键字
与其他语言大差不差,其他东西该有的js也绝对不会少
箭头函数
如果你学过Java的话,这个应该不难懂 () => {}
字符串模板
在此之前,字符串和变量都是用+号来连接,现在只需要 `俩反引号然后像这样嵌入一个${变量}` (变量位置可以放其他表达式)
更方便的数组函数
- map(callbackfn(value, key))
遍历该数组的所有值到回调方法,返回一个新数组 - reduce(callbackfn(), ?initValue)
汇总计算 - filter(callbackfn(value, key, this))
过滤器,这个方法和map类似,如果回调方法返回true则保留这个指针上的值,返回一个新数组 - forEach(callbackfn(value, key))
又是循环遍历/(ㄒoㄒ)/~~
更方便的字符串函数
- startsWith(searchString, ?position)
检查这个字符串的前缀是不是指定值 - endsWith(searchString, ?position)
检查字符串的后缀是不是指定值
面向对象
class定义类
在此之前貌似也有class关键字,但是这边都是用的json,貌似作用不大。如果你学过其他的编程语言可以混合一些设计模式使用,因为在这里也有继承的特性(定义方法不需要加function)
JSON
统一标准:所有的key和字符串都要用双引号标注
ES6中如果要使用的属性在上文中出现过则可以省略,
let attr = "ES6很方便";
{
attr, // attr = "ES6很方便"
fn() { // 现在你可以这样定义方法
}
}
generator 生成器
首先,需要了解一下什么是生成器
当然这个解释起来有点麻烦,而且今天博客的不是js。如果你想了解更多请点击传送门
- 定义一个生成器
这没什么难的,你只需要在定义函数的时候加个 * 号就行了n(≧▽≦)n// * 可以放在function后或者函数名字前面,但必须有空格 // 第一种写法 function *demo() { let a = yield 10; return a + 1; } // 第二种写法 function* demo() { let a = yield 10; return a + 1; }
- 现在再来调用这种方式声明的函数,函数并不会执行,它们会返回一个generator对象
你可以理解为生成器把一个函数分为了多个部分(有点像迭代器),每次next()都会执行一段let d = demo(); let res = d.next(); // {value: 10, done: false} d.next(res.value); // {value: 11, done: true}
Promise
说些什么呢,哎,说多了都是泪,直接上代码吧
let promise = new Promise((resolve, reject) = > {
// 这些形参都是可以自己定义的
if (let res = 天时地利人和())
resolve(res);
else reject(res);
});
// 此时promise = Promise实例
promise.then(resolve => {
console.log(resolve);
}, reject => {
console.log(resolve);
});
// 或这样写
promise.then(res => {
console.log("OK");
}).catch(rej = > {
console.log("ERR");
}).finally(done => {
console.log("DONE"); // 不论回调的是resolve还是reject, 最后都会来到这里(有点像异常捕获)
});
Promise原型的方法
…还是用代码说话吧
// 和 && 一样,可以放很多Promise对象,当这个数组里所有的Promise都调用了resolve的时候会调用才会调用all的回调(返回的也是promise对象,还可以写的更风骚一些)
Promise.all([
new Promise((resolve, reject) => {
resolve();
})
]);
// 任意一个Promise调用了reject都会调用race的回调(先到先调)
Promise.race([
new Promise((resolve, reject) => {
reject();
})
]);