而不是字符串,它是对象
String.prototype.foo = function () { return this; };
typeof "hello".foo() // object ???
"hello".foo().toString(); //hello
它应该返回字符串,我猜。
答案 0 :(得分:4)
没有。真正的字符串("hello"
,'booya'
)是原始值 - 它没有任何函数或任何东西。这只是一个价值。
当你"string".foo
时,它变成了这个:
Object("string").foo
在foo
内,this
指向Object("string")
,而不是原始值。执行Object("string")
会将其变为对象,因此typeof object === 'object'
。
如果您想要“基础”原语,请致电valueOf
:
String.prototype.foo = function () {
return typeof this.valueOf();
}
"meep".foo(); //string
答案 1 :(得分:3)
当您在字符串文字(或任何其他文字)上调用方法时,它会在内部转换为String
对象(或相应的对象)。这就是this
引用的内容,因此返回值是一个对象。
任何对象的类型都是object
,无论它是什么类型的对象:
typeof new String('foo');
// "object"