为什么Object.toString抛出SyntaxError而Array.slice没有?

时间:2013-01-03 17:28:55

标签: javascript object syntax-error prototype

为什么要在控制台中输入:

{}.toString
{}.hasOwnProperty
{}....

抛出一个SyntaxError,然后输入:

[].slice
[].filter
({}).toString
({}.toString)

Array和Object有什么区别?

2 个答案:

答案 0 :(得分:5)

问题是{符号的含糊不清。试试这个:

({}.toString())

当解析器在新语句的最开头看到{}时,它必须在

之间进行选择
  • 这是一个对象文字吗?
  • 这是一个声明块吗?

它总是选择第二个,一个语句块。因此{}是一个空的语句块,而.toString()之后就没有意义了。

[]没有歧义 - 语句开头的[只能是数组文字的开头(作为表达式语句的一部分)。但是function关键字存在类似的问题,它作为函数声明语句的开头和函数实例化表达式的开始执行双重任务。

答案 1 :(得分:1)

因为控制台中的 {}被视为block statement,而不是对象。要使它认为它是一个对象使用({})

({}).toString