Chrome DevTools:箭头(<-)代表什么意思?

5

我对Chrome DevTools中的这个符号(<-)感到困惑。

DevTools控制台中的JavaScript while循环

这是返回值还是控制台值?

当我运行这个while循环时

var i = 0;
while (i < 5) {
    console.log(i);
    i++;
}

控制台日志显示两次 4,并且最后的 4 前面有一个 (<-),这是什么意思?

1
箭头表示前一个表达式的值,但我不知道为什么while循环会评估一个值。使用x = while(i < 5) { i++ }捕获此值在语法上是无效的,但是您可以通过使用x = eval('while (i < 5) { i++ }')来捕获它,这将把4赋给x。非常有趣。 - user229044
更奇怪的是,即使循环体没有返回值,它仍然会计算出循环体内的最后一个表达式:x=true; while(x){ x=false; "a" }//=> "a" - user229044
在Chrome控制台输出中,“<.”符号代表一个对象,可以展开查看其属性和方法。 - nCardot
1个回答

7

这与 eval 函数的特性有关。请注意:

var i = 0, j = while(i < 5) { i++; };

会产生编译错误。不过,

var i = 0, j = eval('while(i < 5) { i++; }');

将值4赋给j。为什么会这样?引用自MDN的话:

eval()返回最后一个被评估表达式的值。

简而言之,它会评估在表达式中所有调用console.log,然后还要记录来自eval本身的返回值,它刚好是最后一个i++的结果。

1
当然。我觉得有趣的是控制台实际上只是eval你的输入;我以为Chrome本身会有更“直接”的方式来评估你的输入。 - user229044
@meagar 我会说Chrome确实在“直接”评估代码,而eval只是其外壳。 :) - p.s.w.g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接