Chrome中的语法错误,但节点中的ReferenceError

问题描述 投票:0回答:1

所以我在chrome和node上都运行相同的代码5=6,这当然会产生错误。但是看看错误类型!

different errors on chrome vs node

在Chrome上,它是节点SyntaxError上的ReferenceError

很奇怪。一方面,导致两者都使用v8,另一方面,因为……您会认为这将在规范中定义,因此必须有人错了。

字符串也发生同样的事情。在chrome控制台之外将js作为脚本运行时,情况相同。在节点控制台之外作为脚本运行时也是如此。

[有人建议,这可能是由于装箱不同而引起的,因为Number(5) = 6都是两者的ReferenceError,但对于任何fn() = _都是这种情况。如果是这种情况,那么still不会解释为什么两个引擎的行为不同。

那么,按照规范,正确的做法是什么?谁错了,为什么两个引擎给我不同的错误?

javascript node.js google-chrome v8 specifications
1个回答
1
投票

来自搜索

分配给文字是语法错误的类型。

ReferenceError在某处有意外分配时发生

SyntaxError当对象在解释语法上无效的代码时表示错误时发生

try {
  Number(5) = 6
} catch (e) {
  console.log(e instanceof ReferenceError)  // true
  console.log(e.message)                    // ""
  console.log(e.name)                       // "ReferenceError"
  console.log(e.fileName)                   
  console.log(e.lineNumber)                 
  console.log(e.columnNumber)               
  console.log(e.stack)                      
}

但是typeof Number(5)是数字

当我在下面写下时,给出SyntaxError,而不是ReferenceError

try {
  5 = 6
} catch (e) {
  console.log(e instanceof ReferenceError)  
  console.log(e.message)                    
  console.log(e.name)                       
  console.log(e.fileName)                   
  console.log(e.lineNumber)                 
  console.log(e.columnNumber)               
  console.log(e.stack)                      
}

它们的错误详细信息相同,但在js上语法有效的代码中为Number(5),但在两种情况下其错误都是相同的(赋值左手无效)。唯一的区别是Number(5)是js中语法上有效的代码,但在node中不是。

但是在我使用错误的节点12.14.0中,js与js相同,因此节点更改了错误类型。enter image description here这表示js对于此错误类型是正确的]

© www.soinside.com 2019 - 2024. All rights reserved.