9

好奇心から質問があります。それで、JSが変数の割り当てをどのように処理するかを調べたところ、それがわかりました。JavaScript で変数の割り当てはどのように機能しますか?

しかし、私が取り組んでいる次のコードでは、同じ原則が見られないようです。

var temp = playlist1[0];
playlist1[0] = playlist1[1];
playlist1[1] = temp;

これが配列要素を交換する標準的な方法であることは知っています。しかし、 temp が を指してplaylist1[0]おり、playlist1[0]の内容が に変更されている場合playlist1[1]、2 つのplaylist1[1]値が連続して表示されないのはなぜですか?

4

4 に答える 4

12

変数だけがオブジェクト ポインターではありません。すべての値(プリミティブではない) はオブジェクト ポインターです。tempオブジェクトポインタも同様です。playlist1要素がオブジェクト ポインターである配列オブジェクトへのオブジェクト ポインターです。たとえばplaylist1[0]、オブジェクト ポインター、playlist1[1]オブジェクト ポインターなどです。

ただし、temp がプレイリスト 1[0] を指している場合

これは意味がありません。tempオブジェクトポインタです。オブジェクトを指します。playlist1[0]オブジェクトではありません。それはオブジェクトポインタです。temp = playlist1[0];オブジェクト ポインタがオブジェクト ポインタtempと同じオブジェクトを指すようにしますplaylist1[0]

C を知っている場合は、次のようなものと同等です。

Object *playlist1[10];

Object *temp = playlist1[0];
playlist1[0] = playlist1[1];
playlist1[1] = temp;
于 2013-07-26T05:40:51.870 に答える
2

これは、参照されている質問の回答と一致しています。変数が指していたデータではなく、変数が指しているオブジェクトを変更しているだけです。つまり、temp は、プレイリスト 1[1] がプレイリスト 1[2] を指すように移動しても影響を受けません。Temp は、playlis1[1] と temp の両方が指していたときに指していた元の値を保持します。プレイリスト 1[1] のみが更新されます

于 2013-07-26T03:20:54.437 に答える