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)

 

posted @ 2022-02-23 10:14  zaijinyang  阅读(105)  评论(0编辑  收藏  举报