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中new String()和直接""有什么区别?
最新推荐文章于 2023-02-26 20:10:49 发布