【问题标题】:google d8 (v8 shell), outputs "undefined" on every press of return keygoogle d8(v8 shell),每次按回车键时输出“未定义”
【发布时间】:2015-08-02 15:15:57
【问题描述】:

我在 linux mint rafaela 上运行 google v8 版本 4.6.0,使用 gclient 下载并使用“make native console=readline -j4”构建。
现在,每当我运行 d8 shell 时,当我按下回车键时,它就会输出 undefined。
这种行为的原因是什么?以及如何让它停止?
例如,这里是终端的摘录。

~/js/v8/out/native/d8 V8版本4.6.0(候选) d8> 打印(“你好世界”) 你好世界 不明确的 d8> //(我在这里按下了回车键。) 不明确的 d8> 打印(“某事”) 某物 不明确的 d8>


编辑:
根据@Xufox 和@"Denys Séguret" 的回答,这里的 undefined 是 print 函数的返回类型,如果按下回车键,返回类型也是 undefined。
但为什么它在从文件加载脚本时不显示相同的行为。
前任。文件“test.js”包含

function foo() {
    return "foo's return";
}
print("hello1");
print("hello2");
foo();
print("hello3");
print("hello4");

然后在 d8 中加载它。

~/js/v8/out/native/d8 V8版本4.6.0(候选) d8> 加载(“test.js”) 你好1 你好2 你好3 你好4 不明确的 d8>

它只有一个“未定义”,我猜这是我在加载指令后按回车键的结果。
此外,它没有显示“foo 函数”的返回值。所以我猜,它忽略了函数的返回值和 undefined 实际上只是返回键的结果?我错了吗?我可以说服他也忽略回车键吗?

【问题讨论】:

    标签: javascript shell installation v8


    【解决方案1】:

    D8 中的每个输入都作为脚本进行评估,然后打印该脚本的结果。这个结果就是语言规范中定义的脚本的所谓完成值。那是这些疯狂的 JavaScript 事物之一,其定义的细节非常荒谬。但粗略地说,它是执行的最后一个表达式语句的值,或者undefined,如果没有到达这样的语句。同样的概念也定义了eval 调用的结果值。

    【讨论】:

      【解决方案2】:

      第二个输出是您输入的语句/表达式的结果。在你的情况下,它总是undefined

      尝试输入一个返回值的表达式,例如 2+2

      您在浏览器的控制台中会得到相同的行为:

      【讨论】:

        【解决方案3】:

        undefined 是函数的返回值。它类似于console.log(…):函数记录内容但返回什么都没有(即undefined)。你可以输入

        typeof console.log(4);
        

        返回"undefined"(在实际记录4之前),因为这是返回值的类型。返回值和记录到控制台是两个独立的过程。

        看这张图:

        这是来自 Firefox 的控制台。带有白条的行是日志消息,带有灰色条和左箭头的行是输入,带有右箭头的是返回值。每个浏览器的行为都不同。

        当输入为空时,某些浏览器不会执行任何操作,但也会返回空格或换行符 undefined

        你会看到,console.log(…)返回undefined,但7实际上返回7。所以不要使用print(…),而只是使用其中的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-23
          • 2021-02-27
          • 2015-04-01
          • 1970-01-01
          • 2020-05-21
          • 2020-09-25
          相关资源
          最近更新 更多