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において文字列は「値による」なのかなぁ。