JavaScript 对 {} 的解释中的块与对象
解析代码时,JavaScript 面临着将“{}”解释为的歧义空块或空对象。为了确定使用哪种解释,JavaScript 遵循其规范中定义的语法。
根据语言规范,Statement 可以采用 Block、VariableStatement、EmptyStatement 或 ExpressionStatement 的形式。块被定义为“{}”,后跟以“}”结尾的可选语句列表。
因此,当 JavaScript 遇到“{}”时,它首先认为它是一个块,因为“{} " 匹配块的语法。仅当解析器无法将其解释为 Block 时,才会将 {} 视为空对象,该对象属于 ExpressionStatement 类别。
在提供的示例中,“{}[]”被解释为一个空块,后跟一个一元加号和一个空数组。空块不执行任何操作,数组将转换为空字符串,然后将其转换为数字 (0)。
Firebug 将此输入解释为语句,导致计算结果为未定义的空块。另一方面,Node.js 将其视为表达式,无法将其解析为 Block,并计算为 {}。
这种差异是由于各个 JavaScript 引擎对输入的不同解释造成的。 Firebug 和 Chrome 开发工具将其视为一条语句,将 {} 视为一个空块,而 Node.js 将其视为一个表达式,从而产生一个空对象。
以上是解析 {} 时,将其解释为什么:块还是对象?的详细内容。更多信息请关注PHP中文网其他相关文章!