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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值