Fork me on GitHub

Javascript 布尔操作符总结

    在一门编程语言中,布尔操作符的重要性堪比相等操作符。如果没有测试两个值关系的能力,那么诸如if...else和循环之类的语句就不会有用武之地了。在像javascript这样弱类型语言更有其妙用,让我们的代码,简捷可靠。布尔操作符一共有3个: 与、或、非。

特性:

 

 先来讨论一下,最简单的‘非!’ 

 相对与和或来说,非更简单一点,先把操作数转换为布尔值,再取反,值不是true,就是false.

结论:逻辑非的返回值最后只有两个:true or false.      

与和或:

而与和或并不总是返回布尔值,&&和||操作主要遵循几大原则: 

1.短路操作原则:如果第一个操作数能决定操作结果,就不会再对第二个操作数求值,直接返回第一个操作值。 

        2.求值过程中会被转型生成副本,但是返回值是原来值;

  javascript中的逻辑操作中的&&||操作并不是总是返回TrueFalse,它返回的值是最后确定结果的值,例:

Null&&true         // null就确定结果了返回 null

true&&undefined     // undefined确定结果返回undefined

Object&&{}&&[]&&2     //返回2

Object&&{}&&2&&[]     //空数组

 Null||9                        //   值为9

null||9||undefined      // =9

null||undefined      // undefined

概括的说:

           &&操作:值为真时,返回最后一个值,到最一个才能确定结果;

                       值为假时,返回第一个假值,一旦有假值结果确定为假.

           ||操作 :值为真时,返回第一个真值,一旦有真结果为真;

                       值为假时,返回最一个值,到最一个才能确定结果.

                      所以说,与和或操作,返回的是最后确定结果的值

 

结论:与和或操作,返回的是最后确定结果的值

 

用法:

              可写出简练的代码。

与:

       1.通过判断某个对象是否存在来赋值;

var object=object1&&object2; //当object1存在时才赋object2的值给object.

2.可以防止访问属性错误(原理同1);

          查询一个不存生的属性并不会报错,但如果对象不存在,试着查询这个不存在属性就会报错。

var box;

var len=box.length;//抛出一个类型错误异常,程序不向下解析

var len=box&&box.length;//不会报错

 或:

1. 可优先选取值。

        Var object=object1||object2; //优先object1

                 2.优先执行函数,以下是Jquery中$.globalEval的源码

    globalEval: function( data ) {
        if ( data && rnotwhite.test( data ) ) {
            // We use execScript on Internet Explorer
            // We use an anonymous function so that context is window
            // rather than jQuery in Firefox
            //可用if-else让代码更易读,这样更简洁
            ( window.execScript || function( data ) {
                window[ "eval" ].call( window, data );
            } )( data );
        }
    }

 

 

          非:

可利用非操作来进行布尔类型转换。如下:

   function isSortable(object){
        
       return !!object.sort;  
    }

 

           !!object.sort等价于Boolean(object.sort)

            

posted @ 2014-10-28 07:32  Lucien!  阅读(329)  评论(0编辑  收藏  举报