js instanceof 操作符的问题

instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
引自 MDN

但是MDN中如下代码:

var simpleStr = "This is a simple string"; 
var myString  = new String();
var newStr    = new String("String created with constructor");
var myDate    = new Date();
var myObj     = {};
simpleStr instanceof String; // returns false, 检查原型链会找到 undefined

我经过测试发现:

simpleStr.__proto__ === String.prototype // true

Object.getPrototypeOf(simpleStr) === String.prototype //true

String.prototype明明就在simpleStr的原型链上啊, 但是 simpleStr instanceof String; 返回了false...
js真坑, 唯一一种解释就是,字面量是没有原型的。 但是为何此处Object.getPrototypeOf(simpleStr) 能获得原型。。

你可能感兴趣的:(js instanceof 操作符的问题)