ES2022 — JS is dead, long live ecosystem
贺师俊 @ GIAC 2022-11-18
知乎 贺师俊 微博 @johnhax
GitHub @hax
关于我
Web前端和JS语言
20多年发展历程
见证人和参与者
2019年6月~2021年4月
360集团 TC39代表 2021年4月起 特邀专家
TC39:JS语言标准委员会
ES3 -> ES5 -> ES6 (ES2015)
自2015年起每年6月发布ES20XX
ES2022
Finished proposals
Error cause
Error cause (ES2022) 吴成忠(@legendecas),阿里巴巴
识别问题
- 不直接暴露低层操作的错误
- 链式错误模式:每个层次的错误提供合适的上下文信息并包装更低层的错误
- 目前不是做不到,但是很麻烦
- 缺乏标准的做法,导致日志和调试工具无法提供帮助
解决方案
newError(message, cause)// ❌
newError(message,{cause})// ✅
向前兼容性
向后兼容性(可扩展性)
个人评价:很有价值 有些小问题但工程上容易解决或无伤大雅
findLast/findLastIndex
findLast/findLastIndex (ES2023) 王文璐(@Kingwl),前微软中国
识别问题
解决方案
// find
array.findLast(n=> n.value%2===1);// { value: 3 }
// findIndex
array.findLastIndex(n=> n.value%2===1);// 2
array.findLastIndex(n=> n.value===42);// -1
动机和场景(灵魂之问) 为什么用库不行?
- padStart / padEnd / trimStart / trimEnd
- Performance
- 库被引用的频繁程度
- API的完整性
计科两大难 命名与缓存
- findRight/findIndexRight
- findEnd/findIndexEnd
- findLast/findIndexLast
- findLast/findLastIndex
个人评价:较有价值,且没有缺点
RegExp Match Indices
RegExp Match Indices (ES2022) /pattern/d 和 .indices
Ron Buckton,微软
识别问题
解决方案
for(let m of techConfs.matchAll(/date:\s*(.+)/gd)){
console.log(m)
}
// ['date: 2022-11-18', '2022-11-18', index: 9,
// indices: [[9, 25], [15, 25]],
// ...]
// ['date: 2022-11-22', '2022-11-22', index: 44,
// indices: [[44, 60], [50, 60]],
// ...]
为什么要额外的 d ? 因为性能
d 的含义?
inDices
个人评价:有价值
但用例较少,性价比不高 正则本身就有过度复杂和滥用问题
写在最后
原文很长, 建议移步原文查看
能一览 JS语言标准委员会 的工作, 也是一种不错的体验