今天照着敲一段代码,但是自己写的时候出现了一个错误:
Object.prototype.toString.call(prop) === '[object Object]' //书上的代码
我自己写的时候,把'[object Object]'写成了'[Object Object]' //两个object都大写了
这两个object代表什么呢?
关于toString()的,这个方法在Objet的原型上,而prop是一个对象,还要用call(),我为什么不直接prop.toString()这样写呢?
另外:
{}.toString() //报错
var obj = {};
obj.toString(); //"[object Object]"
为什么会这样呢?
这两个object代表什么呢?
默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。
我为什么不直接prop.toString()这样写呢?
这个代码Object.prototype.toString.call(prop)是为了做类型判断的,不管prop是什么类型,返回肯定是"[object type]",但是prop不一定是Object,返回的不一定是类型,比如1.toString() 会报错,'aaa'.toString()返回的是'aaa'
{}.toString() //报错
是语法错误,大括号开头的js引擎会认为是代码块,所以会报错。改成({}).toString()就好了