首页 > 一道非常有趣的但你未必能回答正确的JavaScript计算题

一道非常有趣的但你未必能回答正确的JavaScript计算题

下面将输出什么?

console.log(1 + - + + + - + 1)

如果你猜的答案跟你调试的答案一致,请说说你的理由。


1 + - + + + - + 1 可以转化为:

1+(-(+(+(+(-(+1))))))

因为js计算是从左向右的, '+' 和 '-' 分别会进行算数运算,而每次运算的对象就是表达式。

所以,每次都会把符号右侧转化为表达式再计算,而转化成表达式之前又会对语句进行求值。

所以第一个 '+' 后的语句求值为表达式的结果为 1 因为都是Number , 所以 1 + 1 为 2.

这类题目看AST就好了:

来源:http://jointjs.com/demos/javascript-ast

以及,这类题考的多半不是人而是算法/机器,除非你想自己解析javascript、做uglify、做语法高亮、做jshint。
(想起谭浩强的《未定义行为指南》了吗)

【热门文章】
【热门文章】