2011-12-09 11 views
3

参考のためにJavaScript変数を渡すことについて少し混乱します。参照によるJavaScript変数の受け渡し

次のコードを取る:

var p = [1,2]; 
var pRef = p; 
p.push(3); 
pRef === p; // true 

その後、次のコードを考えてみます。

var s = "ab"; 
var sRef = s; 
s = s + "c"; 
sRef === s; // false 

参照することにより、JavaScriptの変数を渡すことについてのトリックは何ですか?

文字列への参照を作成する方法はありますか?

答えて

4

文字列を操作すると、文字列オブジェクトの新しいインスタンスが作成されます。配列内の項目をプッシュしても、配列の新しいインスタンスは作成されませんが、項目が追加されるだけです。

+2

"文字列を操作すると、文字列オブジェクトの新しいインスタンスが作成されます。"新しいインスタンスを変数に代入すると、その新しいオブジェクトをポイントします。 – Thilo

0

文字列はJavaScriptで不変です。

2

2つの例は同じことをしていません。最初のケースでは、pを再割り当てすることはありません。配列内の値を変更するためにメソッドを呼び出すだけです。 2番目のケースでは、sRefを設定した後にsを割り当て直したので、それらは同等ではありません。

0

pは[1,2]を表していませんが、[1,2]はポインタをメモリに保存しています。 したがって、pまたはpRefを変更した場合、この配列がメモリに保存されている場所はその値だけが変更されることはありません。

+0

String変数についても同じことが言えます。 – Thilo

0

オブジェクトは参照渡しされます。あなたは関数が参照することにより、文字列を操作したい場合は、だから、すべてのオブジェクトが参照で渡されたオブジェクト

function manipulate(obj) { 
    obj.bar += ' changed'; 
} 

var foo = { 
    bar: 'that'; 
}; 

manipulate(foo); 

//foo.bar is now 'that changed' 

にその文字列を渡すことができます。配列はjsのオブジェクトです。

関連する問題