{}.toString.call和Object.prototype.toString.call区别

{}.toString.call和Object.prototype.toString.call区别

阅读 2.3k
3 个回答

从结果上看你这里没有区别。(确切地说前面的语法有问题,但这不是此题重点)

但某些对象可以覆写 toString 方法,常见的内置类型比如 Array(toString 结果是以逗号拼接的各个元素的一个字符串)、Date(toString 结果是日期格式的字符串)等等。

甚至于你自己也可以覆写它:

let obj = {
  toString() {
      return '[object Number]';
  }
}

// 猜猜看有什么不同?
obj.toString();
Object.prototype.toString.call(obj);

为了避免这种覆写造成的判断干扰,所以我们需要后者。

没区别,({}).toStringObject.prototype.toString是同一个东西。

如果硬要说使用上的区别,那就是每次执行({}).toString的时候会先创建一个{}对象,Object.prototype.toString则不会,({}).toString的性能可能会稍微差一点点。

单纯从题意上来说是 全等的,因为在实例上找不到,它就会顺着原型链往上找,而 {} 的原型是 Object,
image.png

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