美文网首页
关于很基础的&&和||

关于很基础的&&和||

作者: 迪士尼在逃一刀 | 来源:发表于2018-02-06 23:20 被阅读0次

    今天有人问了我一个这样的问题,javascript中,“hello”&&88的结果是什么呢?当时就给我问懵了,赶紧上网搜了一下但是没有有效的回答,也算是属于最后两个人讨论慢慢想清楚的了。

    要解决这个问题我们需要先明白这几点

    • &&运算符表示并且,意思是,当a&&b时,只有当a和b都为true的时候,最后的运算结果才是true;相反,a和b中任何一个为false,结果就是false。
    • ||运算符表示或者,意思是,当a||b时,只有当a和b都为false的时候,最后的运算结果才是false;只要a和b中任何一个为true,结果就是true。
    • 短路求值(short-circuit evaluations),意思是,当计算a&&b时,如果a的值为false的话,则不进行b的计算了,直接输出a&&b的值为false,因为不论b的值为什么,结果都为false;当计算a||b时,如果a的值为true的话,则不进行b的计算了,直接输出计算结果为false,因为b的值为什么已经对结果构不成影响了。
    • 0转换为false,其他数字均转换为true;空字符串‘'转换为 false,除此外的一切字符串转换为 true;null、NaN、undefined均转换为false

    结合一些例子

    其实到这里大家应该已经大概懂了。

    console.log("hello" && 88); //88
    console.log(88 && "hello"); //hello。
    

    因为“hello”会被转化成true,第一个参数为true,则会去计算第二个参数,所以结果为88。88也表示的true,所以也会去计算第二个参数。

    console.log("hello" && 0); //0
    console.log(0 && "hello"); //0
    

    第一个结果为0也属于情理之中,因为第一个参数为true,所以会去计算第二个参数,最后结果为0也就相当于结果为false啊。第二个结果为0是因为第一个参数就是0,即false,根据短路原理,不会再计算第二个参数了,所以结果也为0。

    console.log("hello" || 0); //hello
    console.log(0 || "hello"); //hello
    

    第一个结果为hello是根据短路原理,在进行||运算时,第一个参数为true时就会返回结果不会再继续进行计算。第二个结果为hello是因为第一个参数为0即false,会继续计算第二个参数,则结果为hello,即为true。

    console.log(null && undefined); //null
    console.log(undefined && null); //undefined
    console.log(null || undefined); //undefined
    console.log(undefined || null); //null
    

    这几个例子给大家自己体会~

    最后附上一个我觉得挺有用的资料:http://www.grauw.nl/blog/entry/510

    如果发现问题,欢迎批评指正~

    相关文章

      网友评论

          本文标题:关于很基础的&&和||

          本文链接:https://www.haomeiwen.com/subject/bfvnzxtx.html