我们知道,如果需要检测对象类,可以使用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
答案 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
,它可能不会破坏任何内容,但通常来说不是一个好主意。)>