我回答這個問題,因爲有誤傳的主題很多:
是這樣一個字符串或一個對象?
沒有"cat"
是原始字符串值:
typeof "cat"; // "string", a String value
"cat" instanceof String; // false
typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
稍後我會談論類型和原始值。
它是繼承String還是String.prototype的所有屬性/方法?
那麼,當您使用property accessor operator(圓點或括號符號),原始值被隱式轉換爲對象,在內部,因此,所有的上String.prototype
的方法是可用的,例如:
當您可以訪問:
"cat".chatAt(0);
場景"cat"
轉換爲對象後面:
Object("cat").chatAt(0);
這就是爲什麼你有權訪問所有值的繼承屬性。
爲什麼會出現String和String.prototype?
String
是一個構造函數,允許你創建String對象或做類型轉換:
var stringObj = new String("foo"); // String object
// Type conversion
var myObj = { toString: function() { return "foo!"; } };
alert(String(myObj)); // "foo!"
的String.prototype
對象,就是String對象實例繼承的對象。
我知道這很讓人困惑,我們有String值和String對象,但是大多數時候你只用字符串值工作,現在不用擔心String對象。
我應該調用String的String對象和String.prototype的String原型嗎?
您應該致電String
"The String
constructor"。
「String prototype」沒問題。
你應該知道「一切都是不是一個對象」。
講起類型,有五個language types規定:
A primitive value是「直接在語言實現的最低級別表示的數據」,這是您可以獲得的最簡單的信息。
先前描述的類型的值可以是:
- 空:該值
null
。
- 未定義:值
undefined
。
- 數字:所有數字,如
0
,3.1416
,1000
等。還有NaN
和Infinity
。
- 布爾值:值
true
和false
。
- 字符串:每個字符串,如
"cat"
和"bar"
。
來源
2010-11-10 08:46:42
CMS
我同意你與「字符串」和新的String()的區別,我承認我不知道這一點。但我不同意數據和對象的部分。也許字符串,布爾值和數字不是對象,但它們被表示爲JS中的對象,並且如果您執行類似於String instanceof Object的操作,則結果爲true。 – mck89 2010-11-10 09:03:18
@ mck89,我的意思是一個原始值是最簡單的數據片段,是的,你可以「將它們當作對象」(例如,訪問繼承的屬性,''foo「.chatAt'或'5 .. toFixed'),但它們仍然只是那個值,而不是對象。關於'String instanceof Object'很明顯,因爲'String'是一個Function對象*,它繼承自'Function.prototype',它繼承自'Object.prototype',因此'String instanceof Function'也會給你'true '。 – CMS 2010-11-10 09:18:13