所以我在chrome和node上都运行相同的代码5=6
,这当然会产生错误。但是看看错误类型!
在Chrome上,它是节点SyntaxError
上的ReferenceError
。
很奇怪。一方面,导致两者都使用v8,另一方面,因为……您会认为这将在规范中定义,因此必须有人错了。
字符串也发生同样的事情。在chrome控制台之外将js作为脚本运行时,情况相同。在节点控制台之外作为脚本运行时也是如此。
[有人建议,这可能是由于装箱不同而引起的,因为Number(5) = 6
都是两者的ReferenceError
,但对于任何fn() = _
都是这种情况。如果是这种情况,那么still不会解释为什么两个引擎的行为不同。
那么,按照规范,正确的做法是什么?谁错了,为什么两个引擎给我不同的错误?
来自搜索
分配给文字是语法错误的类型。
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中不是。