JS“笔试题”: +++ +++++ 如何解析(坑爹啊)

lizhen
  • 32
var a = 1;
console.log( a+++a );
console.log( a+++1 );
console.log( 1+++a );

如上述代码,在 node 6 下面,前两句输出都是2,第三句报错

console.log( 1+++a );
             ^
ReferenceError: Invalid left-hand side expression in postfix operation

从结果来看,对于 a+++a ,node的解析顺序是 (a++) + a ,当第一个a变成常数时,报错。


但我一个老师出了一道js笔试题如下:

var a = 1;
var b = a+++++a;

他问 b 是多少。


我直接回答浏览器的js解析器会报错,他说:有很多种解析方法,

(a++) + (++a)
(a++)++ a
a + ++(++a)

到这里我发现,这道题真的有意义吗?
我Google了 "a+++++a" ,并没有找到这道笔试题,请教各位大神,这道题真的有意义吗?

回复
阅读 3.8k
7 个回答
✓ 已被采纳

没什么实际意义吧。。我记得应该是3个+以上连续时候就会爆出解析错误。
现在有很多面试题都是仅仅是面试时候的题目而已。

在绝地求生大逃杀里面遇到这种出题人我上去就是两喷子

面试考的是基础或者应变能力。。

node上第一第二不会报错。。
console.log(a++a)
输出3
分析如下:
a++ 相当于 a = a+1,++之后才生效,所以后面的a=2 ;
a++ + a =3
1 + 2 =3

console.log(a+++1)
分析:
因为上面的console.log(a++a),a=2;
a++ + 1 = 3
2 + 1 =3
这时候a的值为3。。不过没用到而已。。
如果这里是console.log(a+++a)的话就会变成2+3=5;

最后一句之所以报错是因为
++是跟着一个变量后面。。
1不是变量。。所以会报错。。

没看出有啥意义,计算表达式优先级?() > ++ > +

c的话有贪婪匹配原则,你可以去参考一下

我告诉你准确答案:

没意义。

大树
  • 5
新手上路,请多包涵

在node上运行真的前两个都是2吗? 第一个答案应该是3吧,我在chrome上打印出来是3,这个应该算是不那么重要的基础,推荐看一看你不知道的javascript,很基础的问题

宣传栏