2011-08-09 15 views
9

可能重複:
Why are there two kinds of JavaScript strings?什麼是任何框架或任何人會需要使用String/Number/Boolean對象而不是原始版本的原因?

例如,我們需要,如果我們需要被動態地計算正則表達式表達式中使用的new RegExp()代替正則表達式字面。

但是到底什麼是邊界情況當任何人需要使用字符串/數字/布爾對象而不是他們的原始版本? (因爲我似乎無法甚至認爲一個在哪裏它永遠需要)

+2

無論如何,我投了票,因爲這是一個很好的問題。 –

+0

我能想到的一個原因是爲特定的字符串實例添加一個新的屬性(無論出於何種原因)。你必須用'new String'創建這個字符串。 –

回答

1

一個StringObject,但原始的版本存在,這是作爲一個文字創造了'Hello'(並且是目前最常見的用過的)。

例如,在一個函數中,人們有時使用new String()將另一種類型轉換爲String

function leadingZero(number, padding) { 
    number = new String(number); 
    ... 
} 

前導零不在一個Number顯著,所以它必須是一個String

但是,我仍然希望將Number一個String連接到一個空的String'')。

function leadingZero(number, padding) { 
    number += ''; 
    ... 
} 

這將隱式調用NumbertoString(),返回String原始。

我讀別人說typeof foo==="string"不是傻瓜證明,因爲如果使用new String創建的字符串typeof會給我們object

你可以做一個傻瓜證明像這樣isString()方法...

var isString = function(str) { 
    return Object.prototype.toString.call(str) == '[object String]'; 
} 

jsFiddle

這適用於多window環境。您還可以檢查constructor屬性,但在多個window環境中失敗。

另請參閱Felix Kling對此解答的評論。

+1

您也可以通過直接調用'toString()'方法來轉換爲字符串。 –

+0

是的,這就是我所說的。與使用「」串聯相比,使用'new String'有什麼好處?否則爲什麼人們甚至有理由使用'new String' * *? – Pacerier

+0

@Felix你是對的,我相信與字符串連接會隱式地在非字符串中調用該方法('toString()')。 – alex

相關問題