28

我正在使用 node.js,所以这可能特定于 V8。

我一直注意到 typeof 和 instanceof 之间的差异有些奇怪,但这里有一个让我很困扰:

var foo = 'foo';
console.log(typeof foo);

Output: "string"

console.log(foo instanceof String);

Output: false

那里发生了什么事?

4

2 回答 2

42

typeof是一个构造,它“返回”你传递给它的任何东西的原始类型。
instanceof测试以查看右侧操作数是否出现在左侧原型链中的任何位置。

"abc"重要的是要注意字符串文字和字符串对象之间的巨大差异new String("abc")。在后一种情况下,typeof将返回“object”而不是“string”。

于 2013-02-12T18:56:11.297 回答
9

有文字字符串,有String类。它们是分开的,但它们可以无缝地工作,也就是说,您仍然可以将String方法应用于文字字符串,并且它的行为就像文字字符串是一个String对象实例一样。

如果你显式创建一个String实例,它就是一个对象,它是String类的一个实例:

var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);

输出:

object
true
于 2013-02-12T18:56:54.290 回答