ES6增加了Module方便了JS模块化问题、
Promise解决异步函数的回调地狱、
Class的面相对象编程等问题
一、let和const定义变量
-
let
块级作用域内有效、不能重复声明、不存在变量提升、暂时性死区“暂时性死区“是什么
如果先调用了该变量,然后才用let去声明,那么浏览器就会报错。这在语法上称为 “暂时性死区”。
“暂时性死区”的本质
只要一进入当前作用域,所要使用的变量就已经存在了,但不可获取(否则报错),只有等到声明的那一行代码出现,才可以获取和使用。 -
const
声明一个只读的常量、一旦声明不能改变Tips:一旦声明不能改变 (这里只是针对基本类型的数据,引用类型的数据是可以改变的,所以这里的不能改变是不可改变指针), 所以对于const声明的对象和数组还是可以改变的。如果真的想将对象冻结,应该使用Object.freeze方法。
二、对象与数组的解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。
详情参考链接:https://blog.csdn.net/yiyueqinghui/article/details/89339546
三、函数的默认参数
function log(x, y = 'World') {
console.log(x, y);
}
log('Hello') // Hello World
//首先,默认传的参数是空对象;其次,对该对象解构再赋值默认值
function foo({x, y = 5} = {}) {
console.log(x, y);
}
foo() // undefined 5
四、模板字符串
用反引号 (`) 标识
let month = '9月'
let moreStr = `
today is ${month},
The weather is nice !
`
五、箭头函数
ES5中 this 的指向是可变的,
ES6内箭头函数中 thi的指向是固定的。
ES6内箭头函数内this 指向的固定化,并不是因为箭头函数内部有绑定 this 的机制,实际原因是箭头函数内部根本没有自己的this,它内部的this 其实就是外层代码块的 this
Tips:
(1) 箭头函数体内的 this 对象,就是定义时所在的对象,而不是使用时所在的对象。
(2) 箭头函数不可以当构造函数,即不可以使用 new 命令,因为它没有 this,否则会抛出一个错误。
(3) 箭头函数没有自己的 this,所以不能使用 call()、apply()、bind() 这些方法去改变 this 指向。
(4) 箭头函数不可以使用arguments 对象,该对象在函数体内不存在。如果要用,可以使用rest参数代替。
六、ES6中数组的扩展(spread、rest)
参考链接 :https://blog.csdn.net/yiyueqinghui/article/details/112506431
七、对象的扩展
-
1、属性的简洁表示法
ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值属性简写:
const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {foo: foo};
方法简写:
const o = { method() { return "Hello!"; } }; // 等同于 const o = { method: function() { return "Hello!"; } };
-
2、属性名表达式
ES6 允许定义对象属性名时,用变量或表达式作为属性名,把它们放在方括号内。
ES5属性名的写法
var obj = {};
obj.foo = true;
obj['a' + 'bc'] = 123;
ES6属性名的写法
let propKey = 'foo';
let obj2 = {
[propKey]: true,
['a' + 'bc']: 123
};
八、Promise对象
九、async、await函数
十、Class,面相对象编程
参考链接: https://www.cnblogs.com/chenwenhao/p/9974558.html#_label1