1

为什么在控制台中输入这个:

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

抛出一个 SyntaxError,然后输入:

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

不是吗?

数组和对象有什么区别?

4

2 回答 2

5

问题是{符号的歧义。试试这个:

({}.toString())

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

  • 这是一个对象文字吗?
  • 这是一个语句块吗?

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

没有歧义[]-[语句开头的 a 只能是数组文字的开头(作为表达式语句的一部分)。然而,关键字也有类似的问题function,它作为函数声明语句的开始和函数实例化表达式的开始具有双重作用。

于 2013-01-03T17:30:32.677 回答
1

因为在控制台 {}中被视为块语句,而不是对象。为了让它认为它是一个对象,请使用({})

({}).toString
于 2013-01-03T17:30:49.340 回答