平时咱们判断某个变量类型的时候,会这样写:
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.toString
跟 Function.toString
可能存在着某种关系,难道他们是一样的:
Object.toString == Function.toString
// true
本来认为 Object.toString == Object.prototype.toString
应该是 true
,没想到, 现实跟事实总是差距很大
。
那么,为什么 Object.toString == Function.toString
后果是 true
呢?