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

and*_*lrc 1 javascript prototype object syntax-error

为什么在控制台中键入它:

{}.toString
{}.hasOwnProperty
{}....
Run Code Online (Sandbox Code Playgroud)

抛出一个SyntaxError,然后输入:

[].slice
[].filter
({}).toString
({}.toString)
Run Code Online (Sandbox Code Playgroud)

不?

数组和对象有什么区别?

Poi*_*nty 5

问题是{符号的模糊性.试试这个:

({}.toString())
Run Code Online (Sandbox Code Playgroud)

当解析器{}在新语句的最开始处看到时,它必须在两者之间进行选择

  • 这是一个对象字面意义吗?
  • 这是一个声明块吗?

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

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