2011-12-28 81 views
7

可能重複:
Difference between the javascript String Type and String Object?差 「字符串」 對象和字符串中的JavaScript字面

寫這個簡單的代碼在Firebug:

console.log(new String("string instance")); 
console.log("string instance"); 

你看到了什麼是:

enter image description here

爲什麼這兩個console.log()調用導致不同的輸出?爲什麼字符串文字與通過String對象創建字符串不一樣?它是一個Firebug代表風格嗎?或者它們在性質上有所不同?

+0

請訪問後 http://stackoverflow.com/questions/2051833 /差異之間的JavaScript字符串類型和字符串對象 – Ravia 2011-12-28 15:07:11

+0

-1明顯重複 – 2011-12-28 15:07:50

+2

@ TomalakGeret'kal重複不保證downvotes,只是投票結束作爲重複我如果你有代表,或只是指出來,別人會。 – Davy8 2011-12-28 15:50:06

回答

6

它們不同。字符串文字是一個原始值,而「String」實例是一個對象。必要時,原始字符串類型會自動提升爲String對象。

同樣,還有數字基元和「數字」實例,以及布爾基元和「布爾」實例。

+1

值得一提的是,要從String對象中獲取字符串字面值,可以在String對象上調用'toString()'函數。例如,'new String(「bork」)===「bork」'爲false,而'new String(「bork」)。toString()===「bork」'爲true。 哦,javascript ... – 2014-01-13 15:33:50

+0

而這種「促銷」是如何發生的? – JohnMerlino 2014-08-30 18:37:06

2

new String("...")返回字符串對象

"..."返回一個字符串基元

有些區別是:

  • new String("foo") === new String("foo") - false;對象引用相等規則
  • "foo" === "foo" - true;串平等規則

和:

  • new String("foo") instanceof Object - true;它是從Object得出的對象
  • "foo" instanceof Object - false;這不是一個對象,而是一個原始值

大多數時候你只是想要一個原始值,因爲這些「怪癖」。請注意,字符串對象在添加它們時會自動轉換爲原始字符串,在其上調用String.prototype函數等。

更多信息in the specs

1

console.log("string instance");打印字符串litral但console.log(new String("string instance"));是對象,因此它打印所有的字符串的每個索引和字符的細節。注意下面的屏幕截圖,其中顯示每個字符"string instance"

enter image description here

1

嘗試console.log((new String("string instance")).toString())

不管怎麼說,這是因爲new String("string instance")是一個對象,並執行console.log不會自動字符串化對象