私は次のJavaScriptを作成しました。
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
このコードは変数myArrayを宣言し、それを配列値に設定します。次に、2番目の変数copyOfMyArrayを宣言し、に設定しmyArrayます。で操作を実行してから、copyOfMyArrayとの両方に警告myArrayしcopyOfMyArrayます。どういうわけか、で操作を実行copyOfMyArrayすると、で同じ操作が実行されているように見えますmyArray。
次に、コードは数値を使用して同じことを行いmyNumberます。変数を宣言し、数値に設定します。次に、2番目の変数copyOfMyNumberを宣言し、に設定しmyNumberます。で操作を実行してから、copyOfMyNumberとの両方に警告myNumberしcopyOfMyNumberます。ここでは、私が期待される動作を得るための:異なる値myNumberとしますcopyOfMyNumber。
JavaScriptの配列と数値の違いは、配列を変更すると配列のコピーの値が変更されるように見えるのに対し、数値を変更しても数値のコピーの値は変更されないということです。
どういうわけか、配列は参照で参照され、数値は値で参照されていると思いますが、なぜですか?他のオブジェクトでどのような動作が予想されるかをどのように知ることができますか?
myArray.slice(0);、そのコンテキストで直接割り当てることによる欠点はありますか?