1、默认参数
ES5的时候,若调用make(5),没有给参数b赋值,系统会给一个默认值undefined,下面代码如果传入b为0或者其他假值,则b取2000,如果时make(5,0),那么传进去的0不能作为b的值,那么传进去毫无意义。
function make(a,b) {
b = b || 2000
}
ES6中,不传b值的话,b值就取2000,只有当不为第二个参数传入值或不为第二个参数传入undefined时才会使用b的默认值2000
function make(a,b = 2000) {
}
2、扩展运算符 三个点(…)
对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
let bar = {a: 1, b: 2};
let baz = {...bar, ...{a:2, b: 4}}; // {a: 2, b: 4}
const [first, ...rest] = [1, 2, 3, 4, 5];
first // 1
rest // [2, 3, 4, 5]
3、块级函数
严格模式下,块级函数es5会报错,es6不会,且函数提升至块级区域顶部
if(true) {
console.log(typeof doSomething);// "function"
console.log(typeof do);// 抛出错误 do函数不会提升
function doSomething() {}
let m = function do() {}
}
非严格模式下,es6不会,且函数提升至全局作用域顶部
if(true) {
function doSomething() {}
}
console.log(typeof doSomething);// "function" //因为被提升到了全局作用域,所以块级作用域外也可以访问
4、箭头函数
没有this,super,arguments,new.target绑定
没有原型
不能通过new关键字调用,没有[[Construct]]方法,所以不能被用作构造函数
不可以改变this的绑定
不支持arguments对象
不支持重复的命名参数