我正在使用node.js,因此这可能是V8特有的。
我总是注意到typeof和instanceof之间存在一些奇怪的区别,但这里有一个让我烦恼的事情:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
那里发生了什么?
答案 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