2010-09-20 41 views
3

我想知道何時使用文字以及何時使用對象來創建數據類型值。文字和對象 - 什麼時候使用?

例如,

什麼時候使用這些:

/regexp/ 
"string" 

當這些:

new RegExp("regexp") 
new String("string") 

將這些給我同樣的方法和屬性?

回答

1

當試圖使用這些文字等的對象的一個​​,所述文字轉換爲一個對象(一個包裝被施加到它)在內部,從而可以訪問的任何方法或屬性你試圖使用:

var a = /regexp/ 
a.test(aString); 

...基本上是一樣的:

var a = new RegExp("regexp"); 
a.test(aString); 

的一個不同之處在於,沒有eval(),在運行時構造一個正則表達式的唯一方法是通過使用RegExp()

也是一樣的字符串:

var b = "abc"; 
b.length; 

...是一樣的:

var b = new String("abc"); 
b.length; 

然而,typeof "ABC"是不一樣的typeof (new String("ABC"))。前者返回「字符串」,而後者返回「對象」。 (看評論)。

這幾乎是偏好和可讀性。沒有太多的程序員選擇new String("ABC");"而不是"ABC",只是因爲在掃描代碼時更容易識別"ABC"。這是爲什麼寫"ABC"更簡單的原因:更少的字符。對於正則表達式,您需要決定使用哪一個。

就個人而言,我用"ABC"字符串(更少的字符寫,更易於閱讀,更常見的,等等),當你想連接存儲在一個變量的值

+4

切勿使用'新字符串'。這不是一回事。試試這個: alert(typeof new String(「」)); //「對象」! – InfinitiesLoop 2010-09-20 22:48:32

+0

@InfinitiesLoop;非常有趣,我從來不知道。謝謝!我會修改我的帖子。 – 2010-09-20 22:59:59

+0

@InfinitiesLoop。好點子。 – 2010-09-20 23:01:26

3

new RegExp()可能是有用的。

var x = "exp"; 
var regex = new RegExp("reg" + x); 

我不知道任何不使用String文字的理由。

使用構造函數可能會產生意外結果的示例是在創建數組時。

var arr = new Array(3); // creates an Array with an initial length of 3 

var arr = new Array("3"); // creates an Array with an initial length of 
          // 1 item that has the value "3" 

總的來說,我認爲你會安全地堅持文字。

相關問題