86064


以下のJavaScriptコードでSafariとChrome共に動作しますが結果が異なります。  
なぜそうなるのか理由が知りたいです。  
どうぞご教授ください。

[code]

    <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>
    
[/code]

なお、#foo の宣言を private static methods にしないで foo にすれば、最後の結果は共に 2 になります。

実行結果が異なるのにChromeもSafariもエラーが出ません。

Chrome 97.0.4692.99  
Safari 15.3 (17612.4.9.1.5)  
macOS Monterey Ver. 12.2  
MacBook Air (M1,2020)

追伸：  
以下でも再現することを確認しました。バグなんでしょうか。

[code]

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


CC BY-SA 4.0
2022-02-01T05:26:47.740
86062
2022-02-01T08:51:02.373
2022-02-01T08:51:02.373
51186
51186
question
javascript google-chrome safari
JavaScript ES2022 private static methods でChromeとSafariの挙動違い


Safari Technology Preview 139 では 2 になりますので、Safari のバグだったのでしょう。分割代入が動かないみたいですね。

Firefox でも2です。


CC BY-SA 4.0
2022-02-01T05:55:31.113
86064
2022-02-01T06:01:00.770
2022-02-01T06:01:00.770
3475
3475
86062
answer