可以使用typeof
來確定值是原始的還是盒裝的。無論價值是原始的還是盒裝的
考慮:
typeof "foo"; // "string"
typeof new String("foo"); // "object"
在結合Object.prototype.toString
我們可以定義以下兩種功能
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";
};
是否有任何使用情況這兩個功能呢? (或者對於Number
,Boolean
等的類似功能)。
這個問題背後的概念來自以下Comment by T.J.Crowder。
我們應該關心我們的價值是原始的還是盒裝的?
與基元相比,盒裝值「通過引用傳遞」這一事實可能會帶來一些有趣的結果。 – Raynos
@Raynos,會有什麼後果?基元是不可變的,因此基元的傳遞值和傳遞參考值之間應該沒有明顯的差異。我不認爲有任何程序可以編寫,可以檢測是否所有的「真」都作爲對位於單個內存位置(如在Rhino中)的不可變對象的引用傳遞,並且它是標記的聯合這是在大多數其他口譯員中複製的。 –