x&y 与 x&&y 的区别

973 阅读3分钟

本人一个渣渣前端,近期偶然看到这个有感,写了这篇文章,如有错误希望轻喷。

x&&y这个区别想必大家都知道,就是只有x和y都是true的时候才会返回true,但是x&y这个在工作中就不会经常遇到了。

一、先说x&&y

x&&y,在&&的时候,xy如果是同一数据类型,那么返回值也是同一数据类型,但如果x,y是不同类型,那么就会返回先判断是否的那那个数据类型。当xy都有值时,返回的是y,当xy都是否时返回的是x。当xy一个为是一个为否时,返回的是否的那个。

这个是什么意思呢?下面举几个例子大家就明白了。

1.当xy是同一数据类型

截图.png

2.当xy是不同数据类型

截图.png

二、再说x&y

x&y 与 && 不同的是,它是按位与的,按位与的意思就是按照二进制的方式进行与操作。单个&的操作符它的返回值与&&不同,它的返回值必然是数字。

截图.png

按照二进制的方式进行与操作是什么意思呢? 例如: 8&4

8转化为二进制为1000,4转化为二进制为100,两个二进制要进行与操作,先把4添一位变为0100这样8&4就是1000&0100 然后按位与,第一位1和0得到0,第二位0和1得到0,然后第三四位两边都是0也得到0,那么1000&0100就会得到0000,那么就能得出结果是0了。即8&4结果为0

下面我们来看几个例子

截图.png

从上面的例子我们能看出,单个&的操作符,其实是会将操作符两面的参数转化为数字之后再进行按位与的操作,所以不管xy是什么数据类型最后得到的返回值都是数字。布尔值true会转化为1,false转化为0,字符串4会转化为数字4,其他转化不了数字的,就都是0。

三、&和&&的应用

相信&&操作符大家在工作中经常会用,要判断xy两个条件都满足才可以执行的地方还是很多的,那么&操作符有什么作用呢?

请看下面的例子:

截图.png

这部分代码是webpack打包后t方法的代码,这其中就用到了&操作符,这个mode就是外部调用时传入的数字

其中这个&操作符呢,就起到了一个多开关的作用,当mode是7的时候,那么当前同时传过来的value就可以满足多个条件同时进入多个if中,比如7&1、7&4、7&2,如果传入进来的是8,那么只能进入mode&8的if中。

从这个实例能看出,当你有用一个值进入多个判断这个需求的时候,就可以用&操作符,这样可以让判断比较简洁。