3

私は配列を言います

var list = ["first", "second"];

今、私は他の変数にリストを割り当てます

var temp = list;

今私がリストのスプライスを使うとき

list.splice(0,1);

リストの値を確認すると、

list = ["second"]

また、tempの値を確認すると、

temp = ["second"]

なぜそうなのか知りたいのですが?なぜtempの値が変更されるのですか?

4

4 に答える 4

6

への参照をvar temp = list作成しているような割り当てを行う場合。つまり、配列がインプレースで変更されるため、変更も行われます。templistsplicelisttemp

代わりに、配列のコピーを返すスライスを使用してください。

var temp = list.slice();
于 2012-04-17T08:39:04.663 に答える
1

JSでよくある間違い

これはポインタであり、オブジェクトのクローンではありません。

var temp = list;

オブジェクトを実際にコピーする場合は、いくつかの方法があります。最も簡単なのは、それをそれ自体と連結することです。

var temp = list.concat([]);
// or
var temp = list.slice();

これはやや危険であることに注意してください。配列から基本値を取得するだけです。オブジェクトのクローンを作成し、「完全な」配列クローンを作成するためのより高度な方法があります。

于 2012-04-17T08:42:18.367 に答える
1

スライス

トリックを行う必要があります:

var temp = list.slice(0);

オブジェクトの複製については、こちらをご覧ください。Javascriptでオブジェクトの配列を複製するにはどうすればよいですか?

于 2012-04-17T08:42:56.110 に答える
0

プロトタイプメソッドを使用して、この機能を追加できます。

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

于 2012-04-17T08:48:37.650 に答える