es6总结
1.let块级作用域(出现原因:内部变量会覆盖外部变量,内部变量会泄露为外部变量)
- 在for循环中,设置循环变量和循环体内部变量是不同的作用域;
- 不存在变量提升,如果使用变量,而变量是在使用之后声明的,将会报错;
- 锁定块级域,在外部有定义全局变量,在块级域中定义变量,外部的全局变量不会被引用,并且在内部使用在定义之前会报错;
- 在同一个块级域中不允许重复声明同一个变量;
- 可在块级域中任意嵌套;
- 在写插件时使用的(function(){}())方式,不在必须,let可以锁定当前域;
- 如果想要获取块级域中的值,使用关键字do;
2.const定义不可改变的常量
- 只可以声明的块级域中,声明必须初始化;
- 在同一个块级域中不允许重复声明同一个变量名;
- const定义只是指向常量的指针不变,如果是对象或数组,并不能保证内容不变,可以在对象中添加属性,数组中push,但不可把当前的变量指向另一个常量;
- 固定一个对象请使用Object.freeze({});,冻结一个对象;
3.定义变量的解构赋值
- 当定义多个变量时,可以使用新方式:let [a,b,c] = [1,2,3];其数组中可以嵌套多种类型,"..."为剩下所有;
- 默认值,当值必须是undefined时,默认值才有效;默认值可以引用解构赋值的其他变量,但该变量必须已经声明;
- 对象的解构赋值,必须同名,可以用“:”的方式赋值给其他变量,但本身不会被赋值 let {foo:baz} = {foo:"aaa",bar:"bbb"},baz为aaa,foo为undefined
- 字符串的解构赋值;
- 数值和布尔型的解构赋值;
- 函数参数的解构赋值;
4.字符串的扩展
- 字符串遍历:for...of...
- includes():返回布尔值,表示是否找到了参数字符串。支持第二个参数;
- startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。支持第二个参数;
- endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。支持第二个参数;
repeat
方法返回一个新字符串,表示将原字符串重复n
次。- padStart、padEnd字符串补全,如果原字符串大于设置的长度,则返回原字符串;
padStart
的常见用途是为数值补全指定位数:"1".padStart(10,'0');//"000000001"; - 模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量,用${变量}标识。
- 标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。“标签模板”的一个重要应用,就是过滤HTML字符串,防止用户输入恶意内容。
String.raw
方法,往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
5.正则表达式的扩展