JavaScriptの中の伝値と引用を深く理解する

1864 ワード

1.伝値(by value)
変数の値はコピーされます.元の値とは関係なく、つまり新しい値が修正されても元の値は変わりません.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 .