>>
代表“打印/输出”的意思。Array.prototype.includes
Math.pow
有关的特性,还记得i++
,x += x
这种写法吗,指数函数的中缀表示法与之类似。与python语言一样,JavaScript也采用两个星符号**
来表示Math.pow
。好处有两个:
a. 中缀表示法比函数表示法更简洁,这使它更可取。
b. 方便数学、物理、机器人学等领域的计算。Object.values
/ Object.entries
Object.getOwnPropertyDescriptors
Object.values(obj)
,obj
可以是一个对象或者数组。Object.entries
方法返回一个给定对象可枚举属性值的数组[key, value],与Object.values
类似。String.prototype.padStart
和String.prototype.padEnd
,允许将空字符串或其他字符串添加到原始字符串的开头或结尾。String.padStart(targetLength,[padString])
targetLength:当前字符串需要填充到的目标长度。如果这个数值小于当前字符串的长度,则返回当前字符串本身。String.padEnd(targetLength,padString])
参数释义同上。getOwnPropertyDescriptors
方法返回一指定对象自己所有的属性内容,并且属性内容只是自身直接定义的,而不是从object的原型继承而来的。
定义是:Object.getOwnPropertyDescriptors(obj)
,obj
是指目标对象,这个方法返回的值可能是 configurable、enumerable、writable、get、set 和 value。'coffe',
之后,就只会报仅有一行代码'1891',
的变动,这样做代码review(代码复查)的时候就更省眼力了。async
关键字的作用是告诉编译器对于标定的函数要区别对待。当编译器遇到标定的函数中的await
关键字时,要暂时停止运行,等到await
标定的函数处理完毕后,再进行相应操作。如果该函数fulfiled了,则返回值是fulfillment value,否则得到的就是reject value。Promise.prototype.finally
s
(dotAll) flag for regular expressionsasync
/await
的某些时刻,你可能尝试在同步循环中调用异步函数。例如:next()
方法返回一个Promise。因此await
可以和for...of
循环一起使用,以串行的方式运行异步操作。.then()
,要么失败触发.catch()
。在某些情况下,你想要在无论Promise运行成功还是失败,运行相同的代码,例如清除数组、删除对话、关闭数据库连接等,.finally()
允许实现这样的目的。\u
表示 unicode 转义,\x
表示十六进制转义,\
后跟一个数字表示八进制转义,这使得创建特定的字符串变得不可能,例如Windows文件路径C:\uuu\xxx\111
。String.raw
。...
,这项特性在ES6中已经引入,但是ES6中的作用对象仅限于数组。在ES9中,为对象提供了像数组一样的rest参数和扩展运算符:.
匹配除回车外的任何单字符,标记s
改变这种行为,允许匹配回车换行。exec()
匹配后,能够返回一个包含匹配字符串的类数组对象。reDate
的第 1 个分组\d{4}
相匹配的文本(如果有的话),第 2 项是与 reDate
的第 2 个分组\d{2}
相匹配的文本(如果有的话),以此类推。正则表达式的组以()
包起来。月日年
,那么改变正则表达式的结构后,还有可能会改变变量的赋值部分的代码。如下示例:?<name>
来命名捕获组(也即“匹配到的组”),示例如下:groups
属性中。(?=pattern) 零宽正向先行断言(zero-width positive lookahead assertion) 代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern;(?!pattern) 零宽负向先行断言(zero-width negative lookahead assertion) 代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配pattern;(?<=pattern) 零宽正向后行断言(zero-width positive lookbehind assertion) 代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配pattern;(?<!pattern) 零宽负向后行断言(zero-width negative lookbehind assertion) 代表字符串中的一个位置,紧接该位置之前的字符序列不能匹配pattern。
?<=
进行正向后行断言,可以获取货币的价格而忽略货币符号。\D
这个条件必须满足,但\D
匹配的字符不会作为结果输出(因为先行/后行断言其实只是匹配了一个位置)。如果是下面这样:match1
匹配到的是45
,这是由于在.
前面没有任何符合\D
的匹配内容,它会一直找到符合\D
的内容,也就是.
然后返回后面的内容。而match2
若是没有满足前面肯定反向断言的条件的话,则结果返回null
。\p{...}
和\P{...}
,在正则表达式中使用标记 u
(unicode) 设置,在\p
的{...}
内,可用键值对的方式设置需要匹配的属性而非具体内容。catch
bindingSymbol.prototype.description
Function.prototype.toString
revisionFunction.prototype.toString
Object.fromEntries
JSON.stringify
String.prototype.{trimStart,trimEnd}
Array.prototype.{flat,flatMap}
U+2028
行分隔符与 U+2029
段落分隔符,而 ECMAScript 却不行,所以,该草案旨在解决这一问题。在这之前,如果你使用 JSON.parse()
执行带如上特殊字符的字符串时,只会收到 SyntaxError
的错误提示。该草案同样是向后兼容的,其对用户唯一的影响是保持原样,即在暂不支持特殊字符解析的运行环境中保持报错 SyntaxError
。description
,该对象返回包含 Symbol 描述的字符串。在创建Symbol时向其添加description
(描述),能够直接访问description
,对调试是很有用的。toString()
现在返回精确字符,包括空格和注释。Object.fromEntries
,用于将符合键值对的列表(例如 Map、数组等)转换为一个对象。上一块的代码中的转换逻辑,现在我们只需要一行代码即可搞定。JSON.stringify()
处理无法用 UTF-8 编码表示的字符时(U+D800 至 U+DFFF),返回的结果会是一个乱码 Unicode 字符“�”。该特性提出用JSON.stringify()
来安全的表示这些不正常的UTF-8字符。trimStart()
方法和trimEnd()
方法,这两个方法很好理解,分别去除字符串首、尾的空白字符,就不举例占篇幅了。Array.prototype.flat
数组的所有项会以指定的维度降维(扁平化),然后组成新数组返回;Array.prototype.flatMap
首先会执行一次map()
方法,然后再通过类似flat()
方法扁平化数组。它等同于执行完 map()
后再执行一次 flat()
方法,所以当你执行 map()
返回的结果如果是个数组,然后又要将其扁平化时,这个方法会显得方便。flat()
方法支持多维数组的扁平化,其中Infinity
可以将多维数组压扁成一维数组。flatMap()
String.prototype.matchAll
import()
Promise.allSettled
?
可让我们在查询具有多个层级的对象时,不再需要进行冗余的各种前置校验。obj
或obj.first
是null
/undefined
,表达式将会直接返回undefined
。0
、 空字符串''
、false
等可能有意义的值,但是在上面的表达式中被认为是假值,因此v 和 z 也会被赋值为 some value
。也即:??
,如果表达式在??
的左侧值为undefined
或null
,就返回右侧默认的值。matchAll()
方法返回一个包含所有匹配正则表达式及分组捕获结果的迭代器(iterator)。 在 matchAll
出现之前,通过在循环中调用Regexp.exec
来获取所有匹配项信息(Regexp
需使用/g
标志):matchAll
,就可以不必使用while
循环加exec
方式(且正则表达式需使用/g
标志)。使用matchAll
会得到一个迭代器的返回值,配合 for...of
,array spread
,Array.from()
可以更方便实现功能。import()
功能,以便可以像函数传参那样传入参数实现动态(没错,import
是静态引用的)引用模块(module)。下面有个单页应用简单示例,演示了用import()
开启懒加载。import()
和import
的区别:import(“/foo.js”)
中,实现仍然可以执行静态分析优化。default
的形式对外暴露接口,则可用default
属性直接获得。Promise.allSettled()
?promise
同时进行时咱们很快会想到使用Promise.all
来进行包装,但是由于Promise.all
的一票否决的特性,三个提交中若前面任意一个提交失败,则后面的表单也不会进行提交了,这就与咱们需求不符合。Promise.allSettled
跟Promise.all
类似,其参数接受一个Promise
的数组,返回一个新的Promise
,唯一的不同在于,其没有一票否决的特性,也就是说当Promise
全部处理完成后我们可以拿到每个Promise
的状态,而不管其是否处理成功。-(2^53-1)
至 2^53-1
范的值,即Number.MIN_SAFE_INTEGER
至Number.MAX_SAFE_INTEGER
,超出这个范围的整数计算或者表示会丢失精度。n
即可。例如,123 变为 123n。也可以使用全局方法 BigInt(value) 转化,入参 value 为数字或数字字符串。