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')  ==>  引用數據類型字符串對象(注意:是對象!!!

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM