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

先谈谈经历吧,今天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)

这样就完美了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,440评论 0 5
  • 必备知识:前面课程的学习 概述 本章主要介绍 JavaScript 的表达式和运算符,包括了赋值,比较,算数,按位...
    Airing阅读 404评论 0 1
  • 把当前目录作为Root Document只需要这条命令即可:php -S localhost:3300 也可以指定...
    绚烂的时光阅读 745评论 0 1
  • 变量 限制:1.字母+数字 (第一个字符必须为字母) 2."_"视为字母 一般情况是 _使用在命名较长的变量命中...
    WandaGao阅读 1,243评论 0 0
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,776评论 0 2