可能重複:
Why are there two kinds of JavaScript strings?什麼是任何框架或任何人會需要使用String/Number/Boolean對象而不是原始版本的原因?
例如,我們需要,如果我們需要被動態地計算正則表達式表達式中使用的new RegExp()
代替正則表達式字面。
但是到底什麼是邊界情況當任何人需要使用字符串/數字/布爾對象而不是他們的原始版本? (因爲我似乎無法甚至認爲一個在哪裏它永遠需要)
可能重複:
Why are there two kinds of JavaScript strings?什麼是任何框架或任何人會需要使用String/Number/Boolean對象而不是原始版本的原因?
例如,我們需要,如果我們需要被動態地計算正則表達式表達式中使用的new RegExp()
代替正則表達式字面。
但是到底什麼是邊界情況當任何人需要使用字符串/數字/布爾對象而不是他們的原始版本? (因爲我似乎無法甚至認爲一個在哪裏它永遠需要)
一個String
是Object
,但原始的版本存在,這是作爲一個文字創造了'Hello'
(並且是目前最常見的用過的)。
例如,在一個函數中,人們有時使用new String()
將另一種類型轉換爲String
。
function leadingZero(number, padding) {
number = new String(number);
...
}
前導零不在一個Number
顯著,所以它必須是一個String
。
但是,我仍然希望將Number
一個String
連接到一個空的String
(''
)。
function leadingZero(number, padding) {
number += '';
...
}
這將隱式調用Number
的toString()
,返回String
原始。
我讀別人說哎
typeof foo==="string"
不是傻瓜證明,因爲如果使用new String
創建的字符串typeof
會給我們object
。
你可以做一個傻瓜證明像這樣isString()
方法...
var isString = function(str) {
return Object.prototype.toString.call(str) == '[object String]';
}
這適用於多window
環境。您還可以檢查constructor
屬性,但在多個window
環境中失敗。
另請參閱Felix Kling對此解答的評論。
無論如何,我投了票,因爲這是一個很好的問題。 –
我能想到的一個原因是爲特定的字符串實例添加一個新的屬性(無論出於何種原因)。你必須用'new String'創建這個字符串。 –