经常看到jq的源码中各种&连接在一起赋值一个变量,
例一: var b = a&&a.getName
例二: var b = a&&a.getName||d
例三: return b = a&&a.getName,c = d&&d.getAge
&&的几个特点:
1、顺序,&&优先于||
2、&&两边的表达式都要执行,即执行完,然后接着执行a.getName;||表达是只要一边为true即可,如果左边为true,则右边不执行
针对例子说一下:
例一:可以把&&看成一个个条件,如果a存在那么b = a.getName,这样理解,多个&&类似,只是if多了几个条件而已
例二:||把表达是分为两部分,第一部分是a&&a.getName,第二部分是d,如果第一部分存在,那么第二部分不执行,如果第一部分不存在那么执行第二部分,第一部分遵循例一,化繁为简。
if(a&&a.getName) { b = a&&a.getName }else if(d){ b = d }
例三:主要说一下,有逗号的时候,返回最右边的表达式的结果(c),仅此而已,只是再返回的时候执行了几个赋值操作