js里"12345" instanceof Object为什么是false?

console.log("12345" instanceof Object);
Object是所有对象的祖先,那么为什么字符串12345不是Object的实例,返回false呢?
而且我还发现,都是字面量的,下面2个都是返回true

console.log({} instanceof Object);
console.log([] instanceof Object);
阅读 3k
2 个回答

image.png

js中基本类型的数据都不是实例对象,他的实现类似于

function myInstanceof (left, right) {
    // 基本数据类型直接返回false
    if (typeof left !== 'object' || left === null) return false
    // getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象
    let proto = Object.getPrototypeOf(left)
    while (true) {
        // 查找到尽头,还没找到
        if (proto == null) return false
        // 找到相同的原型对象
        if (proto == right.prototype) return true
        proto = Object.getPrototypeOf(proto)
    }
}

字符串不是对象,所以为false

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题