我想知道何時使用文字以及何時使用對象來創建數據類型值。文字和對象 - 什麼時候使用?
例如,
什麼時候使用這些:
/regexp/
"string"
當這些:
new RegExp("regexp")
new String("string")
將這些給我同樣的方法和屬性?
我想知道何時使用文字以及何時使用對象來創建數據類型值。文字和對象 - 什麼時候使用?
例如,
什麼時候使用這些:
/regexp/
"string"
當這些:
new RegExp("regexp")
new String("string")
將這些給我同樣的方法和屬性?
當試圖使用這些文字等的對象的一個,所述文字轉換爲一個對象(一個包裝被施加到它)在內部,從而可以訪問的任何方法或屬性你試圖使用:
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"
字符串(更少的字符寫,更易於閱讀,更常見的,等等),當你想連接存儲在一個變量的值
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"
總的來說,我認爲你會安全地堅持文字。
切勿使用'新字符串'。這不是一回事。試試這個: alert(typeof new String(「」)); //「對象」! – InfinitiesLoop 2010-09-20 22:48:32
@InfinitiesLoop;非常有趣,我從來不知道。謝謝!我會修改我的帖子。 – 2010-09-20 22:59:59
@InfinitiesLoop。好點子。 – 2010-09-20 23:01:26