下面将输出什么?
console.log(1 + - + + + - + 1)
如果你猜的答案跟你调试的答案一致,请说说你的理由。
1 + - + + + - + 1 可以转化为:
1+(-(+(+(+(-(+1))))))
因为js计算是从左向右的, '+' 和 '-' 分别会进行算数运算,而每次运算的对象就是表达式。
所以,每次都会把符号右侧转化为表达式再计算,而转化成表达式之前又会对语句进行求值。
所以第一个 '+' 后的语句求值为表达式的结果为 1 因为都是Number , 所以 1 + 1 为 2.
这类题目看AST就好了:
来源:http://jointjs.com/demos/javascript-ast
以及,这类题考的多半不是人而是算法/机器,除非你想自己解析javascript、做uglify、做语法高亮、做jshint。
(想起谭浩强的《未定义行为指南》了吗)