我正在使用node.js,所以这可能是V8特有的。JavaScript中typeof和instanceof的区别
我一直注意到一些怪事用typeof和的instanceof之间的差异,但在这里是一个真正的错误我:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
这是怎么回事呢?
我正在使用node.js,所以这可能是V8特有的。JavaScript中typeof和instanceof的区别
我一直注意到一些怪事用typeof和的instanceof之间的差异,但在这里是一个真正的错误我:
var foo = 'foo';
console.log(typeof foo);
Output: "string"
console.log(foo instanceof String);
Output: false
这是怎么回事呢?
typeof
是一种构造,它返回您传递它的任何原始类型。
instanceof
测试以查看右操作数是否出现在左侧原型链的任何位置。
重要的是要注意字符串文字和字符串对象new String("abc")
之间存在巨大差异。在后一种情况下,typeof
将返回“对象”而不是“字符串”。
有字面上的字符串,并且有String
类。它们是分开的,但它们可以无缝地工作,即您仍然可以将String
方法应用于文字字符串,并且它的作用就好像文字字符串是String
对象实例。
如果你明确地创建一个String
实例,它是一个对象,而且它是String
类的一个实例:
var s = new String("asdf");
console.log(typeof s);
console.log(s instanceof String);
输出:
object
true
在JavaScript中,我相信还有的有着天壤之别原始字符串类型和“对象”字符串类型。大多数时候它们是可以互换的,显然不是为了'instanceof'检查的目的。 – millimoose 2013-02-12 18:53:20
看看这个:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects – Waxen 2013-02-12 18:54:07
呸,应该寻找SO第一: 的http://计算器/ 11571923/instanceof-string-not-behaving-as-expected-in-google-apps-script/11572009#11572009 – Eric 2013-02-12 18:54:18