我正在使用 node.js,所以这可能特定于 V8。
我一直注意到 typeof 和 instanceof 之间的差异有些奇怪,但这里有一个让我很困扰:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
那里发生了什么事?
我正在使用 node.js,所以这可能特定于 V8。
我一直注意到 typeof 和 instanceof 之间的差异有些奇怪,但这里有一个让我很困扰:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
那里发生了什么事?
typeof
是一个构造,它“返回”你传递给它的任何东西的原始类型。
instanceof
测试以查看右侧操作数是否出现在左侧原型链中的任何位置。
"abc"
重要的是要注意字符串文字和字符串对象之间的巨大差异new String("abc")
。在后一种情况下,typeof
将返回“object”而不是“string”。
有文字字符串,有String
类。它们是分开的,但它们可以无缝地工作,也就是说,您仍然可以将String
方法应用于文字字符串,并且它的行为就像文字字符串是一个String
对象实例一样。
如果你显式创建一个String
实例,它就是一个对象,它是String
类的一个实例:
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
输出:
object
true