typeof无法区分它们,因为它们都返回相同的结果。
typeof {foo:"bar"} // Object
typeof ["foo","bar"] // Object
那么怎样区分这两者呢?我知道下面这个方法是行得通的,但我希望有更好的方式。
({foo:"bar"}).constructor // Object()
(["foo","bar"]).constructor // [ undefined ]
编辑:啊,看起来在火狐浏览器(firebug)中[undefined]就等同于Array。有点奇怪。
Object.prototype.toString.call(obj)
时它才有效。toString.call(obj)
返回[xpconnect wrapped native prototype]
。 - Jamie WongObject.prototype.toString
存储在变量toString
中,但原样使用会无效。 - bobince