console.dir
的行为。特别地,请参考我的回答中的评论。众所周知,在JavaScript中,
String
对象有许多方法。这些方法都在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();
显然,当您在字符串文字上调用
String.prototype
的方法时,JavaScript解释器正在进行某种形式的转换/强制类型转换。但是,在规范中我找不到任何关于此的参考资料。这是有道理的,否则您必须明确地将每个字符串文字转换为
String
对象,然后才能使用任何方法,这将非常麻烦。因此,我的问题是,这个功能在哪里描述,并且我是否正确地假设文字值被暂时转换为
String
的实例?我是不是过度思考,错过了一些显而易见的东西?
new String(value)
这种写法是完全没用的...不要使用它。 - Šime Vidastypeof "hello" === "string"
返回 true。这是否解决了问题? - bbgString
构造函数、String
对象和string
类型的部分,但它们并没有澄清任何问题。请参考被接受的答案中解释这种行为的规范部分。 - James Allardice