Object.prototype.toString和toString有什么不同?

时间:2019-07-12 09:34:13

标签: javascript ecmascript-6

我们知道,如果需要检测对象类,可以使用Object.prototype.toString.call(arg)

但是在我的测试中,Object.prototype.toString.call(arg) === toString

所以,为什么不使用toString.call(arg)代替长类型的Object.prototype.toString.call(arg)

Polyfill of Array.isArray中,它也使用Object.prototype.toString.call(arg)

different between Object.toString and Object.prototype.toString

1 个答案:

答案 0 :(得分:4)

这不是必需的,只是使代码的意图更加清晰。当您使用toString独立功能时,通常会引用window.toString -window是一个对象,并且对象继承自Object.prototype,所以window.toString === Object.prototype.toString。但是,隐式地依赖这种事情可能是confusing并可能产生错误。

也不能保证您没有定义其他名为toString other 函数,例如:

(() => {
  const toString = () => 'here is a string';
  
  // many lines of code here
  class Foo {}
  const f = new Foo();
  // Does not result in "[object Object]":
  console.log(toString.call(f));
})();

明确使用Object.prototype.toString可使代码一目了然。

(如果愿意,您仍然可以单独使用toString,它可能不会破坏任何内容,但通常来说不是一个好主意。)