文末有其他篇链接
Es9
1、扩展运算符和rest参数
Rest参数与 spread 扩展运算符 在 Es6 中已经引入,不过在 Es6 中只针对与数组,在Es9中为对象提供了像数组一样的rest参数和扩展运算符。
let person = { name: '小明', age: 22}
let newPerson = {...person, address: 'gz'} // { name: '小明', age: 22, address: 'gz'}
// 形参使用解构直接获取对象中需要用到的属性
function sayHello({name,age,city,...otherDetail} ) {
console.log('你好!我叫' + name+'今年'+age+'岁' + ',来自' + city)
console.log(otherDetail)
}
let p = {
name: '小明',
age: 25,
city: '深圳',
hobby: [],
married: false
}
sayHello(p)
2、正则扩展-命名捕获分组
如果正则中没有命名分组,则groups 为undefined
const str = "04-25-2017";
const reg = /(?<month>\d{2})-(?<day>\d{2})-(?<year>\d{4})/;
const groups = str.match( reg ).groups // {month: "04", day: "25", year: "2017"}
const {day, month, year} = groups
3、正则扩展-反向断言
反向断言和正向断言的行为一样,只是方向相反。
反向肯定断言使用语法 (?<=…)
比如我们想获取所有的人民币金额,但是不获取其它货币(比如美元):
const regex = /(?<=¥)\d+(\.\d*)?/;
regex.test('¥1.9'); // true
regex.test('$1.2'); // false
反向否定断言使用语法 (?<!..),和正向断言正好相反:
const regex = /(?<!¥)\d+(\.\d*)?/;
regex.test('¥1.9'); // false???
regex.test('$1.2'); // true
在上面的例子中,regex.test(‘¥1.9’) 的结果是 true,并不是我们认为的 false。
4、正则扩展-dotAll模式
为 JavaScript 的正则表达式增加了一个新的标志 s 用来表示 dotAll。以使 . 可以匹配任意字符。
/foo.bar/s.test('foo\nbar'); // true
const re = /foo.bar/s; // 等价于 const re = new RegExp('foo.bar', 's');
re.test('foo\nbar'); // true
re.dotAll; // true
re.flags; // "s"