在实际开发过程中,我们往往需要加数据保护判断,譬如后端返回的接口数据是data,你需要渲染data.result.status在页面上,那么可以直接写data.result.status在页面上么,答案是否定的,任何时候,当无法保证这些数据一定正常返回时(可能这里的data.result是undefined),你必须做好必要的防御措施,譬如你需要if(data && data.result && data.result.status)进行这样的判断,那么&&返回的是boolean值么,之前我一直是这样以为的,后来才发现答案并不是这样~
a && b,会先求a和b的boolean值,如果a的boolean值是false,那么直接返回a的值,否则返回b的值,譬如:
* a为'',b为2,a&& b结果为''
* a为2,b为'',a&&b结果为''
* a为false,b为2,结果为false
* a为2,b为5,a&&b返回结果是5
是不是和大家想的不太一样呢,而a||b逻辑有些许类似:
a || b,会先求a和b的boolean值,如果a的boolean值是false,那么直接返回b的值,否则返回a的值,譬如:
* 2 ||5,结果为2
* '' ||2,结果为2
那么a|b执行的是什么操作
a|b是一种位操作符,它把运算数转换为数字,再将每个数字中的数位对齐,然后在每个位置上根据1|0=1,0|1=1,0|0=0,1|1=1的法则得出相应数字,得到结果的二进制表示,然后再把这个二进制数字转换成浮点数~
* 2|''结果为2,因为第二个''转换成数字0,00|10结果为10,浮点数为2
* 2|'222e',结果为2,因为第二个转换为NaN,所以直接取了第一个数字作为结果~
而a&b的逻辑就和a|b又有一些类似啦~~
其实这些基础知识在w3school里面就有,可是时间一长基础就不是特别牢固啦,所以想把这个点拿出来,单独醒醒脑~~