美文网首页
【日记】2019-08-14 关于js逗号操作符和优先级问题

【日记】2019-08-14 关于js逗号操作符和优先级问题

作者: 良辰夜 | 来源:发表于2019-08-14 18:13 被阅读0次

    先谈谈经历吧,今天debug js的时候发现了代码被混淆过了,但是由于比较关键,只能硬着头皮看了。
    然后就看到非常经典的一行代码。


    简化一下差不多是这个意思 return i && (expa,expb),expc;
    这里比较痛苦的就是逗号操作符啥意思呀?和for循环或者调用参数相关的我们都很熟悉,但是单独用时什么意思呢?

    百度果然是人类解决问题最好的方式:逗号操作符

    这里面很关键的一句话:逗号操作符 对它的每个操作数求值(从左到右),并返回最后一个操作数的值。

    相当于现在有个 expr1, expr2, expr3
    然后先执行 expr1,然后执行expr2,最后执行expr3,并把expr3返回。

    然而,我随便试了下,反正貌似不太对。


    前面a和b的值不出我所料,说明先执行第一个表达式,后执行第二个表达式,但是为什么c=2呢?难道不应该返回第二个表达式的返回结果才对嘛?

    百思不得解。
    .
    .
    .

    然而,一个无意的回眸,难道 = 的优先级不同? =不是最末尾的优先级?

    通过运算符的优先级,我最终确定了,,的优先级居然比=还低,而且还是最末尾的。

    那么 c= a=1,b=1; 可以转换成 (c= a =1),b=1; ,所以c的返回值其实是1。
    为了验证这个,我们可以这样做。
    c = (a=1,b=1)

    这样就完美了。

    相关文章

      网友评论

          本文标题:【日记】2019-08-14 关于js逗号操作符和优先级问题

          本文链接:https://www.haomeiwen.com/subject/oeenjctx.html