为什么不``} .toString.apply(array)`工作?

时间:2012-04-04 07:00:15

标签: javascript

通常,当我想检查对象的类型(无论是数组,NodeList还是其他)时,我使用以下内容:

var arr = [] // I don't do this, but it's for the sake of the example
var obj = {}
obj.toString.apply(arr) // This works

问题是:为什么可以执行以下操作?

var arr = []
{}.toString.apply(arr) // Syntax error: Unexpected token .

我没有得到语法错误的地方。

我可以做一些与[]接近的事情,但以下工作:

var nodeList = document.getElementsByClassName('foo')
[].forEach.call(nodeList, function(bar) { console.log(bar) }) // Works

所以...我很困惑。

1 个答案:

答案 0 :(得分:16)

当您使用{开始一行时,JavaScript认为它会启动一个块语句,而不是一个对象文字。将它括起来,你就可以了。