2017-03-26 196 views
3

爲什麼:長度 「串」 與新的字符串的長度( 「串」)

var a = "string"; 
console.log("length" in a); 

給出錯誤

var b = new String("string"); 
console.log("length" in b); 

給出正確的。

a的屬性長度與b相同。 typeof是字符串,但它也是一個具有自己屬性的對象。 MDN說:

JavaScript自動將基元轉換爲字符串對象,以便可以對基元字符串使用字符串對象方法。

怎麼了?

+0

「* typeof是字符串,但它也是一個具有它自己的屬性的對象。*」 - well no。 – Bergi

+1

引用中省略了隱含的上下文:「當訪問屬性*時,JavaScript自動將基元轉換爲字符串對象*」。 'in'運算符不訪問屬性。 – Bergi

+0

有沒有答案不回答你的問題? – Xorifelse

回答

1

in關鍵字僅適用於對象。

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

console.log(typeof a); // "string" 
console.log(typeof b); // "object" 

閱讀字符串原語和串之間的區別documentation對象

下面的代碼將在訪問屬性,在這種情況下length自動轉換原語的一個對象。

console.log("string".length); 
0

b是String類型的對象,而a不是,它是字符串。 如果您嘗試使用a.isPrototypeOf(String),它應該輸出false