スプレッド演算子の挙動(なんだこれは?)=> 解決済み

スプレッド演算子の数値が、展開されると勝手に二倍の値になる。以下のJavascriptの切り出しコードで、最初の展開で二倍、さらに二回目の展開でも二倍されてます。

以下のソースは切り出した部分。

let num = [108, 210, 398];

let marge = [...num, 300, 400, 500];

console.log(marge);     // [216, 420, 796, 300, 400, 500] ??

console.log(Math.max(...marge));        // 1592 ?? = 796*2

ChromeでもSafariでも同じだし、不思議な現象。まあ、そのうち解決(原因判明)するんだろうと思うけど。

P.S. (2022/8/22)

同じソース内で、配列iteratorを配列の値を二倍するiteratorでオーバーライドしていたから、つまりスプレッド演算子は実は内部的な処理はiteratorで展開されるということですね。

Array.prototype[ Symbol.iterator ] = function (){
    let index = 0;
    let set = this;

    return{
        next(){
            if (index <set.length){
                return{
                    done: false,
                    value: set[ index++ ]*2
                }
            }
            else{
                return{
                    done: true
                }
            }
        }
    }
}

 

admin