js中String和new String的区别
js中String和new String的区别
在js中我们知道有String、Boolean、Number三个包装类,这三个包装类的作用是为了能够创建这三个基本数据类型对象,以及使用它们的属性和方法。
看到这样一个面试题:
var str = 'hello world'
var str1 = String('hello world')
var str2 = new String('hello world')
console.log(str1 === str)
console.log(str2 === str)
输出结果是什么?
由上述题目,我们可以看到,同样是创建 'hello world' 字符串,却有三种不同的形式。但是得到的结果是否都相同呢?显然不是的!
我们来逐个分析:
var str = 'hello world' 定义了一个 str 变量,同时给变量 str 赋值 'hello world' 字符串,此时 str 的值为字符串 'hello world',类型为基本类型。
var str1 = String('hello world') 这是字符串声明的形式创建了字符串,此时 str1 的值也为字符串 'hello world',类型为基本类型。
但是,不同的来了。
var str2 = new String('hello world') 此时的String为一个构造函数,而 new 操作符创建了一个字符串对象(有关new操作符的相关原理可以参考我的另外一篇博文js中new操作符原理解析),此时的 str2 为字符串对象,类型为引用类型。
经过上述分析,我们能够得到题目的答案:
console.log(str1 === str) // ture(str和str1同为字符串,且值相同)
console.log(str2 === str) // false(str2为字符串对象,对象和基本类型值不相等)
总结:
js中,我们既可以创建基本数据类型的字符串、数字、布尔值,同时,也可以创建由基本包装类型 new 出来的基本包装对象(String对象,Number对象,Boolean对象)。
所以,我们要注意区分这三个基本包装类的创建方式, 字面量:var str = 'hello world' ==> 基本数据类型字符串
声明:var str1 = String('hello world') ==> 基本数据类型字符串
表达式(new):var str2 = new String('hello world') ==> 引用数据类型字符串对象(注意:是对象!!!)
- String 和 new String 的区别?
- JS中String()与 .toString()的区别
- Java中String直接赋字符串和new String的区别
- String 和 new String()的区别
- new String("abc")和String h = "abc"的区别,还有创建了几个对象了
- JavaScript中String(a)和new String(a)两种生成字符串的方法的使用区别
- String与new String的区别
- String与new String的区别
- new String() 和 String 的区别
- Java String = "" 和 new String()区别
- Java String 和 new String()的比较与区别
- java String的面试点("abc"与new String("abc")的区别)
- String 和 new String()区别
- [java] "Hello"和new String("Hello")产生String对象的区别
- String使用字面值常量赋值与new String()赋值的区别
- Java String 和 new String()的区别
- js Date toTimeString toLocalTimeString的区别
- JS中toString()、toLocaleString()、valueOf()的区别
- Java中String直接赋字符串和new String的区别,intern的作用
- New String(s) 和 s.toString() 的区别