JavaScript 让你意外的瞬间(逻辑运算符)
JS中的逻辑运算符呢,emmm,是很让我惊讶的。。。
因为是真的踩到过坑。。。
这里不说“!”非运算,因为它和C或者JAVA应该不会差别很大,这里主要说另外两个。
1、
在之前的学习中,我觉得不管哪门语言,&&运算符的返回值,应该一定为boolean吧。
但在JS中,不这么认为,这个时候JS变得高大上起来了。。。。
那,如果&&的两个操作数都为boolean值得话,那他和JAVA是没有区别的。
但如果,如果!
有一个操作数,不为布尔值,那么它的返回结果就不一定是布尔值。
我们来看代码:
<script>
console.log(1&&2);
</script>
这行代码,返回的结果是2!
那我多试几个:
<script>
console.log(1&&2);
console.log("123"&&true);
console.log(3&&"123");
console.log("4"&&undefined);
console.log(5&&false);
</script>
打印出来:
我惊了,你呢。。。。
仔细看的话,结论是什么:
如果第一个操作数,是这种实例化的(你懂我的意思吧,我有点描述不出来),那么就返回第二个操作数。
那我们现在看另一种情况的:
<script>
console.log(null&&123);
console.log(NaN&&"123");
console.log(undefined&&false);
</script>
打印一下:
现在我只能用WC来形容。。。。
结论是,如果第一个操作数是null,undefined,NaN,那么返回值就是第一个操作数。
最后我们再来看一下另一个代码:
<script>
console.log(false&&123);
console.log(true&&123);
</script>
打印结果:
结论:
如果第一个操作数是false,返回false。
如果第一个操作数是true,返回第二个操作数。
当然这里所有的情况都是在没有错误的情况下啊。。。。。
2、
现在我们再来看一下||运算符,可能就会清晰一点了。
我们就拿刚才的方法来尝试:
<script>
console.log(1||2);
console.log("123"||true);
console.log(3||"123");
console.log("4"||undefined);
console.log(5||false);
</script>
打印出来:
嘶,和&&不一样的是:如果第一个操作数是实例化对象的话返回的是第一个操作数
再看另一种情况:
<script>
console.log(null||123);
console.log(NaN||"123");
console.log(undefined||false);
</script>
打印出来:
嘶,也不一样的是:如果第一个操作数是null,undefined,NaN,那么就返回第二个操作数;
再来看一下最后一种情况:
<script>
console.log(false || 123);
console.log(true || 123);
</script>
看一下结果:
嘶,结论:
如果第一个操作数是false,返回第二个操作数。
如果第一个操作数是true,返回true。
最后的话,是不是发现了,记住&&的特点,||和它反着来就行了。。。。
所以JS在这里弄的这么麻烦,我也不太理解,反正就是希望少踩坑吧。。。。
OK,关于逻辑运算符就说这些,好玩吧,也欢迎补充。。。。。
本文地址:https://blog.csdn.net/weixin_46726346/article/details/107899325