"foo" instanceof String //=> false
"foo" instanceof Object //=> false
true instanceof Boolean //=> false
true instanceof Object //=> false
false instanceof Boolean //=> false
false instanceof Object //=> false
12.21 instanceof Number //=> false
/foo/ instanceof RegExp //=> true
// the tests against Object really don't make sense
数组字面量和对象字面量匹配…
[0,1] instanceof Array //=> true
{0:1} instanceof Object //=> true
为什么不是所有人?或者,为什么不都不呢?
那么,它们是什么实例呢?
在FF3、IE7、Opera和Chrome中也是如此。至少它是一致的。
对我造成的困惑
"str".__proto__ // #1
=> String
所以"str" istanceof String应该返回true,因为istanceof的工作原理如下:
"str".__proto__ == String.prototype // #2
=> true
表达式#1和#2的结果相互冲突,因此应该有一个是错误的。
第一条是错的
我发现它是由__proto__非标准属性引起的,所以使用标准属性:Object.getPrototypeOf
Object.getPrototypeOf("str") // #3
=> TypeError: Object.getPrototypeOf called on non-object
现在表达式2和表达式3之间没有混淆了
基本包装器类型是在使用字符串、数字或布尔值时在幕后自动创建的引用类型
是阅读。例如:
var name = "foo";
var firstChar = name.charAt(0);
console.log(firstChar);
这是幕后发生的事情:
// what the JavaScript engine does
var name = "foo";
var temp = new String(name);
var firstChar = temp.charAt(0);
temp = null;
console.log(firstChar);
因为第二行使用了类似对象的字符串(原语),
JavaScript引擎创建一个String实例,这样charAt(0)就会
工作。String对象在被销毁之前只存在于一条语句中
检查这个
instanceof操作符返回false,因为临时对象为
仅在读取值时创建。因为instanceof实际上并不读取
任何东西,没有临时对象被创建,它告诉我们-values没有被创建
基本包装器类型的实例。您可以创建原始包装器
类型手动