这个问题已经出来了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