javascript - Object.prototype.toString 和 toString 有什么区别?

标签 javascript ecmascript-6

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

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

那么,为什么我们不使用 toString.call(arg) 来替换 Object.prototype.toString.call(arg) 这是一个 long 类型。

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

different between Object.toString and Object.prototype.toString

最佳答案

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

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

(() => {
  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 ,它可能不会破坏任何东西,但总的来说这可能不是一个好主意。 )

关于javascript - Object.prototype.toString 和 toString 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57004235/

相关文章:

javascript - highchart堆积柱每个类别的总数据

javascript - 使用 JavaScript 函数添加多个 DIV 元素

javascript - JavaScript 中的 .then 函数有什么用?

javascript - 为什么 console.log 在传递模板文字时返回一个数组?

javascript - 如何从对象中过滤掉键?

javascript - 构造函数内声明和构造函数外部声明的区别

javascript - 标记模板文字混淆

javascript - 主干模型服务器端和内存处理

javascript - Javascript 中的 HTML DOM 绘图事务?

javascript - 使用node.js、nodeunit 和 ES6/Harmony