平时咱们判断某个变量类型的时候,会这样写:

var foo;Object.prototype.toString.call(foo);// "[object Undefined]"

某次,我错写成了这样:

var foo;Object.toString.call(foo);// VM40:1 Uncaught TypeError: // Function.prototype.toString requires that 'this' be a Function//  at toString (<anonymous>)//  at toString (<anonymous>:1:765)//  at <anonymous>:2:17

后果报错了,产生了什么?
提醒我传入的 foo 应该是个 Function,但很显著 foo 是个 undefined。改一下试试看:

var foo = function(){};Object.toString.call(foo);// "function(){}"

这让我纳闷了,function(){}这个后果应该是对一个函数调用 toString 的后果,于是:

var foo = function(){};foo.toString();// "function(){}"

果然,那是不是阐明 Object.toStringFunction.toString 可能存在着某种关系,难道他们是一样的:

Object.toString == Function.toString// true

本来认为 Object.toString == Object.prototype.toString 应该是 true,没想到,现实跟事实总是差距很大

那么,为什么 Object.toString == Function.toString 后果是 true 呢?