我想知道何时使用文字以及何时使用对象来创建数据类型值。
例如
我何时使用这些:
/regexp/
"string"
当这些:
new RegExp("regexp")
new String("string")
这些会给我相同的方法和属性吗?
答案 0 :(得分:3)
new RegExp()
会很有用。
var x = "exp";
var regex = new RegExp("reg" + x);
但我不知道有什么理由不使用字符串文字。
使用构造函数获取意外结果的示例是在创建数组时。
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"
总的来说,我认为你坚持文字是安全的。
答案 1 :(得分: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"))
不同。前者返回“string”而后者返回“object”。 (见评论)。
这几乎与偏好和可读性有关。没有太多程序员选择new String("ABC");"
而不是"ABC"
,只是因为在扫描代码时更容易识别"ABC"
。出于同样的原因,为什么写"ABC"
更容易:更少的字符。对于正则表达式,由您决定使用哪个。
就个人而言,我使用"ABC"
作为字符串(写字符少,易读,更常见等)