JavaScript中new String()和直接""有什么区别?

 
  
 
  
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()是在运行时创建!

你可能感兴趣的:(javascript)