2016-05-11 79 views
5

我已經看到了所有的問題和答案在stackoverflow,但找不到這個簡單的答案。Javascript:String vs. Object

字符串和對象究竟有什麼區別?

舉例來說,如果我有這樣的代碼:

var a = 'Tim'; 
var b = new String('Tim'); 

到底是什麼區別?

據我所知,new使代碼複雜化,而new String減慢了速度。

另外,據我所知a==btrue,但更嚴格地說a===bfalse。爲什麼?

我似乎無法理解對象和字符串創建背後的過程。 例如:

var a = new String ('Tim'); 
var b = new String ('Tim'); 

a==bfalse

+0

區別在於''test「'是一個字符串,'new String(」test「)'是一個對象。這就是爲什麼'「測試」!==新的字符串(「測試」)'。 'new String(「test」)'是一個圍繞字符串的包裝對象。 – dfsq

+0

明白了。您能否更詳細地發表對象和字符串創建的邏輯答案?謝謝。 – super11

+0

'a == b'是'true',因爲'=='操作符會強制匹配類型(儘可能地),而'==='操作符用於您明確想要比較類型的地方他們是。 –

回答

6

a是字符串類型,而b是對象的類型。

===包括類型檢查和原因字符串不是一個對象 a === b會給你一個false

new String ('Tim') === new String ('Tim')將評估爲false也是如此,因爲這兩個是不同的對象

+1

即使'new String('Tim')== new String('Tim')'(loose comparison)也是錯誤的,因爲比較了對象引用。即使對象包含相似的數據,它們也是不同的對象。對象的屬性沒有深度比較,無論是鬆散的還是嚴格的比較。 – GolezTrol

+0

謝謝。爲什麼使用'new'會減慢過程?由於對象創建? – super11

+2

@ super11是的,因爲創建對象,也因爲它的用途。圍繞字符串的對象包裝只比「簡單」的字符緩衝稍慢,但差別非常小,幾乎不應該成爲決定基礎的理由。使用你認爲最適合你的東西。 – GolezTrol

3

普通字符串沒有必要創建一個對象,只需創建您的變量併爲其賦值。

並儘可能您對爲什麼==是真實的,===是假的,那是因爲問題:

==比較值 ===比較值和類型(是字符串,一個是目的)。

的另一個例子是:

VAR一個= 1;

var b ='1';

一個== b //真因爲它們都具有相同的價值

一個=== b // false作爲一個字符串,一個是整數

+0

謝謝,我不知道a == b會輸出true,並且=== b/false。 – super11

1

你可以做以下看到的區別:

var a = "foo"; 
var b = new String("foo"); 
console.log(a); 
console.log(b); 

enter image description here

第一個是一個字符串文字和第二個是一個字符串對象。這就是爲什麼當你比較他們時,他們並不平等,但是當你比較他們的價值時。你可以閱讀更多關於文字here

相關問題