这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战
特性概要
- 声明类的字段:类字段可以在类的顶层被定义和初始化
- 私有方法&字段:用#前缀来定义类的私有方法和字段
- 类的静态公共方法和字段:增加了静态公共字段、静态私有方法和静态私有字段的特性
- ECMScript 类静态初始化块:在类声明/定义期间评估静态初始化代码块,可以访问类的私有字段
- 检测私有字段:可以使用in操作符,如果指定的属性/字段在指定的对象/类中,则返回真,并且也能判断私有字段
- 正则匹配索引:该提案提供了一个新的/dflag,以获得关于输入字符串中每个匹配的开始和索引位置结束的额外信息
- 在所有内置的可索引数据上新增.at()方法
- Object.hasOwn(object, property):使用 Object.hasOwn 替代
- Object.prototype.hasOwnProperty.call
- Error Cause:为了便捷的传递导致错误的原因
以下重点讲述相关开发使用的:
class Test {
static instance = new Test(0);// 静态共有变量
static #value=123; // 静态私有变量
// 静态私有方法
static #print(){
return this.#value;
}
}
复制代码
.at
在所有基本可索引类中添加 .at()
方法,目前处于 Stage 3
阶段。 很多时候,类似于 Python 中的数组负值索引可以非常实用。比如在 Python 中我们可以通过 arr[-1]
来访问数组中的最后一个元素,而不用通过目前 JavaScript 中的方式来访问 arr[arr.length-1]
。这里的负数是作为从起始元素(即arr[0]
)开始的反向索引。
但是现在 JavaScript 中的问题是,[]
这个语法不仅仅只是在数组中使用(当然在 Python 中也不是),而在数组中也不仅仅只可以作为索引使用。像arr[1]
一样通过索引引用一个值,事实上引用的是这个对象的 "1"
这个属性。所以 arr[-1]
已经完全可以在现在的 JavaScript 引擎中使用,只是它可能不是代表的我们想要表达的意思而已:它引用的是目标对象的 "-1"
这个属性,而不是一个反向索引。
这个提案提供了一个通用的方案,我们可以通过任意可索引的类型(Array,String,和 TypedArray)上的 .at
方法,来访问任意一个反向索引、或者是正向索引的元素。
示例:
const arr = [1,2]; arr.at(-1); // 2 arr.at(-2); // 1
复制代码
Object.hasOwn()
采用一种使更易于访问的方法替代 Object.prototype.hasOwnProperty()
,目前处于 Stage 4
阶段。
其实现在我们就可以通过 Object.prototype.hasOwnProperty
来使用提案所包含的特性。但是直接通过对象自身的 hasOwnProperty
来使用 obj.hasOwnProperty('foo')
是不安全的,因为这个 obj
可能覆盖了 hasOwnProperty
的定义,MDN 上也对这种使用方式进行了警告。