JavaScript中new String()和直接""有什么区别?
1. new
是强制创建一个对象
直接=
"xx"是看以前有没有同样的字符串,有就直接引用,没有才创建(设计模式中的Flyweight
)。
2. 简单的区别在于类型不一致
var obj1 =
new String(
"abc");
//类型为object
var obj2 =
"abc";
//类型为string
(
obj1 ==
obj2)
//true
(
obj1 ===
obj2)
//false
3. new String()
是创建字符串的对象,“”
是给字符串的声明赋值,赋值时值存储在常量池中,而new
String()
创建的对象是存储在堆区中,如果两者进行equals
比较,都相等,但如果是通过“=”
比较,则new
String()
的结果不相等,因为每次都会新创建对象。
4. javasript
的话,有个最重要的区别:(重要!!!)
如果你在之前定义了
function String()
{
...
}
那么new
String()
就不是创建系统默认的字符串类型了。
这个区别有时候会导致安全问题,比如:
var outPtr;
function String(x)
{
outPtr = x;
}
如果你的代码中使用了new
String()
,利用这个代码有可能构造一个跨域攻击。而使用""是安全的。
5. 最主要的区别是存储位置不同和创建位置不同!
“”
创建的字符串存储在方法区的常量池中,而new
String()
是在堆中创建一个对象并把这个对象的句柄返回给引用!“”
是在编译时创建,new String()
是在运行时创建!
转载请注明原文地址: https://www.6miu.com/read-63207.html