ES6
let 和 const
let 和 var 类似,但是let 只在所在的代码块内生效,且不存在变量提升。(同一个代码块内只能有一个相同的let 生效,称为暂时性死区)
而const 声明后,对于原始类型不可修改,对于对象类型,不可修改索引地址。const 声明后必须给与值。
let 和 const 都不允许重复声明。
块级作用域
ES5 只有全局作用域 和 函数作用域,ES6新增了块级作用域(原理是let的生效区域)。
do 表达式可以获取块级作用域返回值。
顶层对象的是属性:
浏览器环境:window,NODE环境:global 统一用顶层的this 指代,NODE中,this返回的是当前的模块。
解构赋值
数组的解构赋值
变量赋值,例:let [a,b,c] = [1,2,3]
默认值,例:let [x,y=2] = ['a']对象的解构赋值
对象是无序的,所以变量的取值取决于属性名,例子:let {a,b} = { b:1,a :0}字符串的解构赋值
例 : const [a,b,c,d,e] = 'hello'
字符串属性的赋值,例 :let { length : len } = 'hello' // len = 5数字和布尔值的解构赋值
略
- 常见使用场景:变量值的交换,函数返回多值,提取JSON 数据,参数的默认值,遍历Map 结构,提取模块的指定方法
字符串的扩展
codePointAt() 能够正确得处理4个字节存储得字符。(某些时候代替charAt 使用)
String.fromCodePoint() 代替String.fromCharCode 能够正确得是识别32位得UTF-16字符。
字符串遍历接口 of
includes() 返回布尔值,表示是否找到了字符串。
startsWith(),endWith() 返回布尔值,表示是否在源字符串头部(尾部)找到字符串
repeat(x) 返回一个新字符串,表示原字符串重复X次
padStart(num,'ab'),padEnd() 字符串补全,如果字符串长度不够,则在字符串头部(尾部)增加第二个参数直到长度足够
字符串模板 :姓名:${name}
标签模板:alert`123`
等同于 alert(123) 可以过滤HTML字符串,防止用户输入恶意内容。
String.raw() 返回一个反斜杠(\)都被转义得字符串。
正则得扩展
RegExp(字符串 or 正则表达式,表达式修饰符)
字符串的正则 match() , replace(), search(), split()
u 修饰符 用于处理大于\uFFFFFF 的 Unicode 字符串。使用u 修饰符后,所有两次都会被正确得识别码点大于0xFFFF 得 Unicode 字符
y 修饰符 和g相似,但是y 修饰符每次执行都必须从头开始
.点字符 表示除换行符意外的任意单字符,点字符必须配合u字符,例:/^.$/u.test(s)
Unicode 字符表示法 大括号{} 来表示必须配合 u 修饰符,否则会被认为为量词
sicky 属性,表示是否设置了y 修饰符
flags 属性,返回正则表达式得修饰符
数字得扩展
isFinite() 和 isNaN() 分别表示数字是否是有限值和数字是否为NaN。