主要参考
String Primitive与String Object的直观区分
String Primitive包括:
由引号包裹的字符串值,如
"abc"
;转换函数
String()
返回的字符串值,如String("abc")
String Object包括:
- 通过
new
操作符创建的String对象,如new String("abc")
- 通过
直观区别:类型不同
typeof "abc"; // string typeof String("abc"); // string typeof new String("abc"); // object
应用区别
主要体现在作为eval()
的参数值时,结果返回不同(当然慎用eval()
)
String Primitive将被作为源码执行:
eval("2 + 2"); // number 4
String Object仅作为对象被传入后原样返回
eval(new String("2 + 2")); // object String { "2 + 2" }
转换关系
String Primitive -> String Object
当需要调用String对象的方法或执行属性查找时,JavaScript会自动将String Primitive转换为String Object,因此可直接调用相应方法:
"abc".charAt(1); // b
String Object -> String Primitive
通过转换方法
String()
转换:typeof String(new String("abc")); // string
通过对象未被重载的
valueOf()
或toString()
方法typeof new String("abc").toString(); // string typeof new String("abc").valueOf(); // string