为什么这会转换为对象

时间:2011-11-04 17:18:58

标签: javascript

而不是字符串,它是对象

String.prototype.foo = function () { return this; };
typeof "hello".foo() // object ???
"hello".foo().toString(); //hello 

它应该返回字符串,我猜。

2 个答案:

答案 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"