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,关于逻辑运算符就说这些,好玩吧,也欢迎补充。。。。。

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页