這個問題已經出來了another,其中涉及console.dir
與字符串文字的行爲。尤其請參閱my answer的評論。爲什麼String.prototype的方法可用於字符串文字?
衆所周知,String
JavaScript中的對象有許多方法。這些方法在String.prototype
對象上定義。例如,String.prototype.toUpperCase
。因此,我們可以做這樣的事情:
var s = new String("hello"),
s2 = s.toUpperCase(); //toUpperCase is a method on String.prototype
但是,我們也可以這樣做:
var s = "hello", //s is a string literal, not an instance of String
s2 = s.toUpperCase();
顯然,JavaScript解釋正在做某種形式的轉換/施放的,當你調用String.prototype
的方法在字符串文字上。但是,我在spec中找不到任何對此的提及。
它是有道理的,因爲否則,在使用任何方法之前,您必須明確地將每個字符串文字轉換爲String
對象,並且這會很煩人。
所以我的問題是,這個功能描述在哪裏,我是否正確地假設文字值暫時被轉換爲String
的實例?我是否過度思考這一點,並忽略了一些明顯的東西
順便說一句'新的字符串(值)'表示法是100%無用的...不要使用它。 – 2011-12-20 21:00:20
我知道是。問題是爲什麼。規範中描述了哪些內容? – 2011-12-20 21:00:56
字符串文字是一個字符串對象:'typeof「hello」===「string」'返回true。這是否解決了這個問題? – bbg 2011-12-20 21:01:35