js新特性
ES7:
Array.prototype.includes(n)// 判断Array是否包含了n,返回布尔值。
2**10; // 1024
ES8:
Object.values()// 拿取对象的value Object.values({a: 1, b: 2, c: 3}); // [1, 2, 3] Object.entries()// 将对像转成数组 Object.entries({a: 1, b: 2, c: 3}); // [["a", 1], ["b", 2], ["c", 3]] String.padStart()/String.padEnd() // 在字符串前/后添加空格 'hello'.padStart(10); // " hello" 'hello'.padEnd(10) "hello "
ES9:
?=pattern 零宽度正预测先行断言
意思就是匹配内容右侧必须为pattern
var str = "i'm singing and dancing"; var reg = /\b(\w+(?=ing\b))/g var res = str.match(reg); console.log(res) // ["sing", "danc"]
?:pattern
匹配pattern但不获取匹配结果
var str = 'aaabbb' var reg = /(a+)(?:b+)/ str.match(reg) // ["aaabbb", "aaa", index: 0, input: "aaabbb", groups: undefined]
?!pattern 零宽度负预测先行断言
就是匹配右侧不是pattern内容
var str = 'nodejs' var reg = /node(?!js)/ reg.test(str) // false
?<=pattern
匹配这个位置之前为pattern的内容
var str = '111$222' var reg = /(?<=\$)\d+/ str.match(reg) // ["222", index: 4, input: "111$222", groups: undefined]
?<!pattern
匹配这个位置之前部位pattern的内容
var str = '¥998$888'; var reg = /(?<!\$)\d+/; console.log(reg.exec(str)) //998
ES10:
Array.flat()和Array.flatMap() [1, 2, [3, 4], [5, 6, 7]].flat(Infinity); // [1, 2, 3, 4, 5, 6, 7] [1, 2, 3, 4].flatMap(a => [a**3]); // [1, 8, 27, 64] String.trimStart()和String.trimEnd() // 去除字符串首尾空白字符
ES11:
??空值处理, ?? 的左侧 运算符求值为undefined或null,返回其右侧。 null ?? '用户2' // '用户2' false ?? '用户2' //false 可选链?. user.childer?.name // 前者undefined就会返回undefined,不像 user.childer.name // 会直接报错
ES12:
replaceAll 替换符合匹配规则的字符 'hello world'.replaceAll('l', ''); // "heo word" 逻辑运算符和赋值表达式 a ||= b // 等价于a = a || (a = b) a &&= b // 等价于a = a && (a = b) a ??= b // 等价于a = a ?? (a = b)
希望大佬看到有不对的地方,提出博主予以改正!