1、let
生命一个只在let所在代码块内生效的变量
2、conset
声明一个只读的常量。一旦声明,常量的值就不能改变。
3、变量的解构赋值
let [foo, [[bar], baz]] = [1, [[2], 3]];
let [x, y = 'b'] = ['a', undefined];
let { foo, bar } = { foo: "aaa", bar: "bbb" };
let arr = [1, 2, 3];let {0 : first, [arr.length - 1] : last} = arr;first // 1last // 3
const [a, b, c, d, e] = 'hello';
[[1, 2], [3, 4]].map(([a, b]) => a + b);
// [ 3, 7 ]
let {length : len} = 'hello';
len // 5
for (let [key,value] of map) { }
const { SourceMapConsumer, SourceNode } = require("source-map");//模块加载
解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。ES6 的规则是,只要有可能导致解构的歧义,就不得使用圆括号。
4、字符串扩展
codePointAt(0)方法的参数,是字符在字符串中的位置(从0开始),返回一个字符的码点。
String.fromCodePoint()识别32位的UTF-16字符码点
字符串可以被for...of
循环遍历
at(0)
方法,可以识别 Unicode 编号大于0xFFFF
的字符,返回正确的字符
includes():返回布尔值,表示是否找到了参数字符串。startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let s = 'Hello world!';
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
上面代码表示,使用第二个参数n
时,endsWith
的行为与其他两个方法有所不同。它针对前n
个字符,而其他两个方法针对从第n
个位置直到字符串结束。
repeat(0)
方法返回一个新字符串,表示将原字符串重复n
次。
字符串补全
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
``.trim() //去除多余的换行和空格
5、正则扩展
new RegExp(/abc/ig, 'i').flag
/\u{20BB7}/u.test('