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操作符的相關原理可以參考我的另外一篇博文
經過上述分析,我們能夠得到題目的答案:
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])諮詢.