google d8(v8 shell),每按一次返回键

时间:2015-08-02 15:15:57

标签: javascript shell install v8

我在linux mint rafaela上运行谷歌v8版本4.6.0,使用gclient下载并使用“make native console = readline -j4”构建。
现在每当我运行d8 shell时,按下返回键时输出undefined。
这是什么原因?我怎么让它停下来?
例如,这是终端的摘录。

~/js/v8/out/native/d8
V8 version 4.6.0 (candidate)
d8> print("hello world")
hello world
undefined
d8>          //(I had pressed enter key here.)
undefined
d8> print("something")
something
undefined
d8> 


编辑:
根据@Xufox和@“DenysSéguret”的答案,这里未定义的是print函数的返回类型,并且在按Enter键的情况下返回类型也是未定义的。
但是为什么在从文件加载脚本时它不会显示相同的行为 防爆。文件“test.js”包含

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

在d8中加载它。

~/js/v8/out/native/d8
V8 version 4.6.0 (candidate)
d8> load("test.js")
hello1
hello2
hello3
hello4
undefined
d8> 

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

enter image description here

答案 2 :(得分:0)

undefined是该函数的返回值。它与console.log(…)类似:函数记录内容但返回没有(即undefined)。您可以输入

typeof console.log(4);

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

看看这张照片:

Return vs. Logs in the Console

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

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

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