typeof
を使用して、値がプリミティブであるかボックスであるかを判断できます。値がプリミティブであるかボックスであるかにかかわらず
は考えてみましょう:私たちは次の2つの関数
var toString = Object.prototype.toString;
var is_primitive_string = function(s) {
return toString.call(s) === "[object String]" && typeof s === "string";
};
var is_boxed_string = function(s) {
return toString.call(s) === "[object String]" && typeof s === "object";
};
を定義することができObject.prototype.toString
と組み合わせて
typeof "foo"; // "string"
typeof new String("foo"); // "object"
は、この2つの関数のための任意のユースケースがありていますか? (Number
、Boolean
などの機能)。
この質問の背後にあるコンセプトは、次のとおりです。Comment by T.J.Crowder。
私たちが持っている価値が原始的であるか、または箱に入れられているかどうかは今まで気にかかっていますか?
ボックス化された値がプリミティブと比較して「参照渡し」されているという事実は、興味深い結果をもたらす可能性があります。 – Raynos
@レイノス、どんな結果?プリミティブは不変であるため、プリミティブの値渡しと参照渡しの間には、目に見える差異がないはずです。私はあなたが書くことができるプログラムはありません。それは、すべての 'true'が単一のメモリ位置(Rhinoのような)にある不変オブジェクトへの参照として渡されるのか、それがタグ付きの共用体であるのかそれは他のほとんどの通訳のようにコピーされます。 –