JavaScriptの中の伝値と引用を深く理解する
1864 ワード
1.伝値(by value)
変数の値はコピーされます.元の値とは関係なく、つまり新しい値が修正されても元の値は変わりません.JavaScriptでは基本的なタイプはすべて送信値です.
3
1
2.引用(by reference)
参照自体がコピーされてFunctionに渡され、参照先は複製されていません.functionでは、オブジェクトの属性の値が変更されたら、元の参照先と同じオブジェクトですので、元の参照からアクセスするのは修正された値です.
ただし、functionで参照が新しいオブジェクトを指すだけであれば、元のオブジェクトの値は変更されません.変更されたのはコピーされたこの参照のみです.
JavaScriptでは、Stringも引用しています.jsにはcharAt方法しかありません.対応する修正方法がなく、javaのStringと同じです.
変数の値はコピーされます.元の値とは関係なく、つまり新しい値が修正されても元の値は変わりません.JavaScriptでは基本的なタイプはすべて送信値です.
function testPassValue()
{
var m=1;
var n=2;
// m,n , passValue
passValue(m,n);
alert(m); //
}
function passValue(a,b)
{
a = a+b; // a , a copy
alert(a);
}
出力結果:3
1
2.引用(by reference)
参照自体がコピーされてFunctionに渡され、参照先は複製されていません.functionでは、オブジェクトの属性の値が変更されたら、元の参照先と同じオブジェクトですので、元の参照からアクセスするのは修正された値です.
ただし、functionで参照が新しいオブジェクトを指すだけであれば、元のオブジェクトの値は変更されません.変更されたのはコピーされたこの参照のみです.
function testPassValue()
{
var date = new Date(2006,02,27);
alert(date.getDate()); // 27
// date , passReference, date
passReference(date);
alert(date.getDate()); // 12
//
changeReference(date);
alert(date.getDate()); // 12
}
function passReference(da)
{
// da , function , , .
da.setDate(12);
}
function changeReference(da)
{
// da copy, ,
da= new Date(2007,05,11);
// da ,
alert(da.getDate()); // 11
}
3特殊なString JavaScriptでは、Stringも引用しています.jsにはcharAt方法しかありません.対応する修正方法がなく、javaのStringと同じです.
var s1 = "hello";
var s2 = "hell" + "o";
if (s1 == s2)
alert("s1 = s2"); // ? java ( ,java !), java == . js String== , . Object == java .