ES6学习总结
1、let和const
(1)let声明的变量只在块级作用域中有效;let声明的变量不会变量提升(变量在声明前使用);let不允许在一个作用域内重复声明一个变量
(2)const声明的变量如果是一个对象,不变的是指向这个对象的地址,对象的值是可变的
(3)var和function声明的全局变量是顶层对象的属性,let、const和class声明的全局变量不属于顶层对象的属性
2、解构赋值
(1)数组的解构赋值:解构赋值允许指定默认值:let [a, b=1] = [1] //a=1, b=1,只有当一个数组成员严格等于undefined,默认值才会生效,默认值可以引用解构赋值的其他变量,但该变量必须已经声明:let [a=1, b=a] = [] //a=1, b=1
(2)对象的解构赋值:let {a, b} = {a: 1, b: 2} //a=1, b=2,变量必须与属性同名才能取得正确的值。对象的解构赋值可以很方便的将某个对象的方法,赋值到某个变量:let {sin, cos, log} = Math。如果变量名和属性名不一致,必须写成这样 let {a: x, b: y} = {a: 1, b: 2} //x=1, y=2,也就是说对象的解构赋值的内部机制是先找到同名属性,然后再赋给对应的变量,真正被赋值的是后者而不是前者
(3)注意点:
a.将一个以声明的变量用于解构赋值,要非常小心:let x; {x} = {x: 1}会报错,因为js引擎会将{x}理解成一个代码块,从而发生语法错误,正确的写法:let x; ({x} = {x: 1})
b.由于数组的本质是特殊的对象,因此可以对数组进行对象属性的结构:let arr = [1, 2, 3] let [0: first, [arr.length-1]: last] = arr //first=1, last=3
(4)字符串的解构赋值:const [a, b, c, d, e] = 'hello' //a=h,b=e,c=l,d=l,e=o
(5)函数参数的解构赋值:function add([x, y]) {return x+y}; add([1, 2]) //3
(6)用途:
a.交换变量的值:let x=1,y=2; [x, y] = [y, x];
b.从函数返回多个值:function example() {return [1, 2, 3]}; let [a, b, c] = example();
c.提取JSON数据:let jsonData = {id: 1, name: 'xiaoming'}; let { id, name } = jsonData;
d.遍历map结构:for (let [key, value] of map) {console.log(key,value)}
e.输入模块的指定方法:const { get } = require('axios')
3、字符串的扩展
(1)for of循环遍历
(2)includes()、endsWith()、startsWith(),这三种方法可以用来确定一个字符串是否包含在另一个字符串中,都支持第二个参数,表示开始搜索的位置,不过endsWith是针对前n个字符
(3)repeat()方法返回一个新字符串,表示将原字符串重复n次 'x'.repeat(3) //'xxx',如果是小数会被取整'x'.repeat(2.9) //'xx',参数如果是字符串会先转为数字