为什么这会在 Javascript 的 REPL 中返回一个值?



当我在javascript的repp(浏览器的控制台或节点(中执行此表达式时

if(false) {4} else {5}

它返回5,但我不明白为什么。

if没有返回任何东西,因为我做不到:

var foo = if(false) {4} else {5}

那么为什么返回值?

的确,if语句是语句,并且没有"值"。在普通JS脚本中,评估if(false) {4} else {5}时不会发生任何事情。

哪种控制台通常会给您作为回返回值是最后一个评估表达式的值。

在您的情况下,评估5并返回。

javascript语句的完成值。相同的值eval()返回。

  • 某些语句具有完成值。例如,if (true) { 42; }具有完成值42
  • 但是有些语句没有。例如var a = 42
  • 如果您尝试在连续编写多个语句,那么当上一个语句没有完成值时,它会使用以前的一个。例如'this one'; var a = 42;将是'this one'
  • 完成值并不总是是最后评估的表达式。例如,for(var i = 1, s = 0; i <= 100; i++) s += i;,最后一个评估表达式为 i <= 100(false(,而在 i++(101(之前。但是其完成值是5050(s += i的结果(。

最新更新