当我在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
的结果(。