JavaScript中的typeof和instanceof之间的差异

Eri*_*ric 27 javascript syntax typeof instanceof node.js

我正在使用node.js,所以这可能是V8特有的.

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

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

Output: "string"

console.log(foo instanceof String);

Output: false
Run Code Online (Sandbox Code Playgroud)

那里发生了什么?

Nie*_*sol 40

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

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


Guf*_*ffa 8

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

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

var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
Run Code Online (Sandbox Code Playgroud)

输出:

object
true
Run Code Online (Sandbox Code Playgroud)