我在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实际上只是返回键的结果?我错了吗?我可以说服他忽略返回键吗?
答案 0 :(得分:1)
D8中的每个输入都被评估为脚本,然后打印该脚本的结果。该结果是脚本所谓的完成值,如语言规范中所定义。这是一些疯狂的JavaScript事物,其定义的细节非常荒谬。但粗略地说,它是执行的最后一个表达式语句的值,如果没有达到这样的语句,则为undefined
。同样的概念也定义了eval
调用的结果值。
答案 1 :(得分:0)
答案 2 :(得分:0)
undefined
是该函数的返回值。它与console.log(…)
类似:函数记录内容但返回没有(即undefined
)。您可以输入
typeof console.log(4);
返回"undefined"
(在实际记录4
之前),因为这是返回值的类型。返回值和登录控制台是两个单独的过程。
看看这张照片:
这是来自Firefox中的控制台。带有白色条带的行是日志消息,带有灰色条带和左箭头的行是输入,带右箭头的行是返回值。每个浏览器的行为都与此不同。
当输入为空时,某些浏览器不会执行任何操作,但是也会返回空格或换行符undefined
。
您会看到,console.log(…)
返回 undefined
,但7
实际返回 7
。所以,不要只使用print(…)
,而只使用其中的值。