1. 程式人生 > 其它 >js中String和new String的區別

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 = newString('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')  ==>  引用資料型別字串物件(注意:是物件!!!


作者: 默然晴天 部落格地址:http://www.cnblogs.com/bryanfu/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出, 原文連結 如有問題, 可郵件([email protected])諮詢.