以下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.

chromium 97.0.4692.99

afterwards:
I heard that it will be fixed in the next version.
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中的错误.

Javascript相关问答推荐

如果使用React Select ,如何将CSS类添加到元素中?

Promise.all立即跳到那时,而不是调用所有Promise

鼠标移动时更新画布

D3多线图显示1线而不是3线

使用TMS Web Core中的HTML模板中的参数调用过程

IMDB使用 puppeteer 加载更多按钮(nodejs)

如何修复(或忽略)HTML模板中的TypeScript错误?'

空的结果抓取网站与Fetch和Cheerio

获取Uint8ClampedArray中像素数组的宽度/高度

使用Promise.All并发解决时,每个promise 的线性时间增加?

JS:XML insertBefore插入元素

覆盖TypeScrip中的Lit-Element子类的属性类型

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

如何将未排序的元素追加到数组的末尾?

第三方包不需要NODE_MODULES文件夹就可以工作吗?

按下单键和多值

无法避免UV:flat的插值:非法使用保留字"

在Odoo中如何以编程方式在POS中添加产品

我不知道如何纠正这一点.

对不同目录中的Angular material 表列进行排序