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‘)  ==>  引用数据类型字符串对象(注意:是对象!!!

 

 


 

js中String和new String的区别

上一篇:MS14-068域提权漏洞复现


下一篇:【学习笔记】R语言生成GIF动态图