JS中String()與new String()的區別


今天看到這樣的面試題,如下:

var yiifaa = 'yiifaa', str1 = new String(yiifaa), str2 = String(yiifaa)
  • 1
  • 2
  • 3

聲明與賦值了3個變量,然后考題如下:

// 請確認以下的判斷是否准確 str1 === yiifaa // str2 === yiifaa // typeof str1 === typeof str2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

根據JS的語法,要滿足===的條件如下: 
1. 如果是引用類型,則兩個變量必須指向同一個對象(同一個地址); 
2. 如果是基本類型,則兩個變量除了類型必須相同外,值還必須相等。

再把話題切換到String對象上來,String的聲明方式有三種(請參見第一段代碼),但產生的類型卻不盡相同,結果如下:

// 類型為string,為基本類型 typeof yiifaa // 類型為object,為引用類型 typeof str1 // 類型為string,為基本類型 typeof str2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

那現在答案很清楚了,如下:

// false, 因為str1為引用類型 str1 === yiifaa // true, 因為都是基本類型,並且值相等 str2 === yiifaa // false, 雖然都是字符串,但分別為object與string typeof str1 === typeof str2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

總結

很神奇的String對象,一方面可以作為基本類型,另一方面還可以作為引用類型,更神奇的是,為String.prototype添加方法,基本類型還可以引用到,怎么做到的?


免責聲明!

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



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