JavaScriptの値とアドレス
データの値を操作するには、基本的に異なる2つの方法があり、この2つの技術をそれぞれ伝値とアドレスと呼ぶ.
値:
1つのデータが値によって動作する場合、関係はデータの値である.値を割り当てる過程で、変数、オブジェクト属性、または配列要素に格納される実際の値のコピーが作成されます.コピーされた値と元の値は、それぞれ2つの完全に独立した値に格納されます.データが
値は関数に渡され、データのコピーはこの関数に渡されます.関数がこの値を変更した場合、変更は関数が所有するデータのコピーにのみ影響し、元のデータには影響しません.最後に、1つのデータが値と別のデータと比較される場合、2つの異なるデータセグメントは、同じ値を表す必要があります(これは通常、
バイトごとの比較を行うと等しいことがわかります).
例:
結果:i 2:10 i 1:5
アドレス:
アドレスを使用すると、実際のコピーが1つしかなく、その値への参照(アドレス)が操作されます.値をアドレスで操作すると、変数は直接値を格納しません.値を格納するアドレスだけで、コピー、転送、比較されるのはこのアドレスです.したがって、アドレスの付与動作では、この値のアドレスのみが付与され、この値のコピーではなく、
この値自体でもない.値を割り当てた後、新しい変数が指す値は元の変数が指す値と同じです.両方のアドレスは有効で、この値を操作するために使用できます.値が1つのアドレスで変化した場合、この変化も元のアドレスで表現されます.1つの値がアドレス方式で関数に渡される場合も同様である.値のアドレスは関数に渡され、関数は
このアドレスを使用して値自体を変更すると、このような変更は外部の関数に表示されます.最後に、ある値がアドレスを介して別の値と比較されると、2つのアドレスが比較されて、同じ値の一意のコピーを指しているかどうか、2つの適切な値を決定する.
例:
結果は:a:4,b:5 a 1:4,b:5
アドレスと値の比較:
値を伝える
アドレス
コピー
実際にコピーされた値は、2つの異なる独立したコピーが存在します.
コピーされたのは数値の参照だけです.この新しい参照によって数値が変更された場合、この変更は最初の参照にも表示されます.
トランスファ
関数に渡される値は独立したコピーであり、その変更は関数の外部には影響しません.
関数に渡されるのは、数値の参照です.関数が渡された参照によって数値が変更された場合、この変更は関数の外部にも表示されます.
比較
2つの独立した値(通常はバイトごとに比較)を比較して、同じかどうかを判断します.
2つの参照を比較して、同じ値を参照しているかどうかを判断します.2つの異なる数値に対する参照は等しくありません.この2つの数値が同じバイトで構成されていても.
値:
1つのデータが値によって動作する場合、関係はデータの値である.値を割り当てる過程で、変数、オブジェクト属性、または配列要素に格納される実際の値のコピーが作成されます.コピーされた値と元の値は、それぞれ2つの完全に独立した値に格納されます.データが
値は関数に渡され、データのコピーはこの関数に渡されます.関数がこの値を変更した場合、変更は関数が所有するデータのコピーにのみ影響し、元のデータには影響しません.最後に、1つのデータが値と別のデータと比較される場合、2つの異なるデータセグメントは、同じ値を表す必要があります(これは通常、
バイトごとの比較を行うと等しいことがわかります).
例:
<script type="text/javascript">
var i= 5;
test1(i);
function test1(i){
i = 10;
alert("i2: "+i);
}
alert("i1: "+i);
</script>
結果:i 2:10 i 1:5
アドレス:
アドレスを使用すると、実際のコピーが1つしかなく、その値への参照(アドレス)が操作されます.値をアドレスで操作すると、変数は直接値を格納しません.値を格納するアドレスだけで、コピー、転送、比較されるのはこのアドレスです.したがって、アドレスの付与動作では、この値のアドレスのみが付与され、この値のコピーではなく、
この値自体でもない.値を割り当てた後、新しい変数が指す値は元の変数が指す値と同じです.両方のアドレスは有効で、この値を操作するために使用できます.値が1つのアドレスで変化した場合、この変化も元のアドレスで表現されます.1つの値がアドレス方式で関数に渡される場合も同様である.値のアドレスは関数に渡され、関数は
このアドレスを使用して値自体を変更すると、このような変更は外部の関数に表示されます.最後に、ある値がアドレスを介して別の値と比較されると、2つのアドレスが比較されて、同じ値の一意のコピーを指しているかどうか、2つの適切な値を決定する.
例:
<script type="text/javascript">
var xxx = {a:1,b:2};
test(xxx);
function test(xxx){
xxx.a=4;
xxx.b=5;
alert("a: "+xxx.a+",b: "+xxx.b);
}
alert("a1: "+xxx.a+",b1: "+xxx.b);
</script>
結果は:a:4,b:5 a 1:4,b:5
アドレスと値の比較:
値を伝える
アドレス
コピー
実際にコピーされた値は、2つの異なる独立したコピーが存在します.
コピーされたのは数値の参照だけです.この新しい参照によって数値が変更された場合、この変更は最初の参照にも表示されます.
トランスファ
関数に渡される値は独立したコピーであり、その変更は関数の外部には影響しません.
関数に渡されるのは、数値の参照です.関数が渡された参照によって数値が変更された場合、この変更は関数の外部にも表示されます.
比較
2つの独立した値(通常はバイトごとに比較)を比較して、同じかどうかを判断します.
2つの参照を比較して、同じ値を参照しているかどうかを判断します.2つの異なる数値に対する参照は等しくありません.この2つの数値が同じバイトで構成されていても.