gpt4 book ai didi

javascript - 为什么 Node REPL 不会给出与 Wat 视频或我的浏览器控制台相同的结果?

转载 作者:搜寻专家 更新时间:2023-10-31 23:43:26 27 4
gpt4 key购买 nike

例如,在 Wat 中在我的 Chrome 浏览器中:

{} + {}

NaN

但是在 Node REPL 中,它是

[object Object][object Object]

无可否认,后者对我来说更有意义 - 强制执行然后采取行动是一件非常合理的事情。然而,我不明白这种差异从何而来,因此,我不明白我能在多大程度上信任 REPL 来理解一些简单的 JS 行为。

最佳答案

{} 既是表达式(空对象字面量)又是语句(空 block )。

eval() 将尝试将其输入解析为语句。
如果它不是“普通”语句(例如,if),它将被解析为表达式语句,对表达式求值。

因此,{} + {} 被解析为两个语句(通过 ASI):{}; +{}。第一条语句是一个空 block ;第二个语句是 unary + 运算符,它将一个对象强制转换为一个数字。
将对象强制转换为数字涉及调用 toString()(返回 [object Object]"),然后将结果解析为数字(实际上不是) .
eval() 然后将其作为最终语句的值返回。

Node wraps its REPL input() 中强制将其解析为表达式:

  // First we attempt to eval as expression with parens.
// This catches '{a : 1}' properly.
self.eval('(' + evalCmd + ')',

关于javascript - 为什么 Node REPL 不会给出与 Wat 视频或我的浏览器控制台相同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com