JavaScriptにおいて文字列は「値による」のか「参照による」のか
正直言って、自信ないが、「値による」でいったん納得。
「値による」のか「参照による」のかで問題となりそうなのは以下の3点。
1:コピー
2:渡し
3:比較
1の場合:
var str1 = "before";
var str2 = str1; //文字列が参照型ならばstr2はstr1の参照変数となる
str2 = "after";
alert(str1);
before
2の場合:
var str1 = "before";
var str2 = "after";
alert(str1);
set(str1,str2);
alert(str1);
alert(set(str1,str2));
function set(aObj,aArg)
{
aObj = aArg;
return aObj;
}
"before"⇒"before"⇒"after"
この結果をうけると、文字列は参照渡しではなく、値渡しか。
3の場合:
以下のコードで調べられ、文字列が値による比較の場合、str1とstr2はいずれもabという値なのでstr1とstr2は値による比較として等しくなる。参照による比較の場合、str1とstr2は異なるので等しくならない。
var str1 = "ab";
var str2 = "a" + "b";
if(str1 == str2){alert("値による比較です。")}
「値による比較です。」
結局、JavaScriptにおいて文字列は「値による」なのかなぁ。