Chrome和Safari之间针对ES2022私有静态方法的行为差异



以下JavaScript代码将在Safari和Chrome中工作,但结果不同
我想知道为什么会发生这种事。

<script>
class Bar {
'use strict';
baz() {
return new Promise((resolve) => {
resolve();
}).then(() => {
return [2];
});
}
}
new class {
'use strict';
#foo = 1;
constructor() {
console.log(this.#foo); // 1
(new Bar()).baz()
.then((res) => {
console.log(res);   // [2]
console.log(this.#foo); // 1
[this.#foo] = res;
console.log(this.#foo); //*** Chrome: 2, Safari: 1 ***
});
}
}
</script>

请注意,如果您将#foo声明为foo而不是私有静态方法,那么两者的最终结果都将为2。

Chrome 97.0.4692.99
Safari 15.3(17612.4.9.1.5(
macOS蒙特利版本12.2
MacBook Air(M12020(

之后:
我听说它将在下一个版本中修复
https://webkit.org/blog/12193/release-notes-for-safari-technology-preview-139/

我能够重现所描述的行为,并将代码简化为:

(() => new class {
#foo = 1;
constructor() {
[this.#foo] = [2];
console.log(this.#foo); //*** Chrome: 2, Safari: 1 ***
}
})();

这看起来很像JavaScriptCore/Safari中的一个bug。

最新更新