1. ES5和ES6的区别?
ECMAScript 5 (ES5):ECMAScript 的第五版,于2009年标准化,该标准已在所有现代浏览器中完全支持。
ECMAscript 6 (ES6):ECMAscript 第 6 版,2015 年标准化。这个标准已经在大多数现代浏览器中部分实现。
两者之间的区别:
箭头函数和字符串插值
const foo = (name)=>{
return `hello ${name}`;
}
等价于=>
const foo = name => `hello ${name}`;
const:const表示无法修改变量的原始值。const表示对值的常量引用。可以改变被引用对象的属性值,但不能改变引用本身。
const arr = [];
arr.push = ("name");
console.log(arr.length === 1); //true
arr = ["age","address"]; //false
块作用域: ES6中,let和const会创建块作用域,不会var声明变量一样被提升。
默认参数:默认参数是可以使用默认值初始化函数。当参数省略或undefined时使用默认参数值。
function foo(a,b = 2) {
return a*b;
}
foo(5); //10
类定义与继承
ES6 引入了对类(class关键字)、构造函数(constructor关键字)和 extend 关键字(用于继承)的语言支持。
for-of 运算符
for…of 语句创建一个遍历可迭代对象的循环。
Spread 操作符用于对象融合
const obj1 = {};
const obj2 = {a:2, c:3, d:4};
const obj3 = {...obj,...obj2}
Promises
Promises提供了一种处理异步操作的结果和错误的机制。你可以用回调来完成同样的事情,但是promises通过方法链接和简洁的错误处理提供了更高的可读性。
const isGreater = (a,b) => {
return new Promise((resvolve,reject)=>{
if(a>b) {
resolve(true)
} else {
reject(false)
}
})
}
isGreater(1,2){
.then(result => {
console.log('greater')
})
.catch(result => {
console.log('smaller')
})
}
模块导出和导入
模块导出:
const myModule = {x:1,y:() => {console.log('this is helloworld')}}
export default myModule;
导出:
import myModule from './myModule'