私は配列を言います
var list = ["first", "second"];
今、私は他の変数にリストを割り当てます
var temp = list;
今私がリストのスプライスを使うとき
list.splice(0,1);
リストの値を確認すると、
list = ["second"]
また、tempの値を確認すると、
temp = ["second"]
なぜそうなのか知りたいのですが?なぜtempの値が変更されるのですか?
私は配列を言います
var list = ["first", "second"];
今、私は他の変数にリストを割り当てます
var temp = list;
今私がリストのスプライスを使うとき
list.splice(0,1);
リストの値を確認すると、
list = ["second"]
また、tempの値を確認すると、
temp = ["second"]
なぜそうなのか知りたいのですが?なぜtempの値が変更されるのですか?
JSでよくある間違い
これはポインタであり、オブジェクトのクローンではありません。
var temp = list;
オブジェクトを実際にコピーする場合は、いくつかの方法があります。最も簡単なのは、それをそれ自体と連結することです。
var temp = list.concat([]);
// or
var temp = list.slice();
これはやや危険であることに注意してください。配列から基本値を取得するだけです。オブジェクトのクローンを作成し、「完全な」配列クローンを作成するためのより高度な方法があります。
トリックを行う必要があります:
var temp = list.slice(0);
オブジェクトの複製については、こちらをご覧ください。Javascriptでオブジェクトの配列を複製するにはどうすればよいですか?
プロトタイプメソッドを使用して、この機能を追加できます。
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
これにより、これを行うことができます。
var a = [1,2,3];
var b = a.clone();
a[1] = 5;
console.log(a); //1,5,3
console.log(b); //1,2,3
免責事項:恥知らずにここから借りました(記事全体を読む価値があります):http://my.opera.com/GreyWyvern/blog/show.dml/1725165