JavaScript中的typeof和instanceof之间的差异

时间:2013-02-12 18:51:54

标签: javascript node.js syntax instanceof typeof

我正在使用node.js,因此这可能是V8特有的。

我总是注意到typeof和instanceof之间存在一些奇怪的区别,但这里有一个让我烦恼的事情:

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

Output: "string"

console.log(foo instanceof String);

Output: false

那里发生了什么?

2 个答案:

答案 0 :(得分:40)

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

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

答案 1 :(得分:9)

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

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

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

输出:

object
true