在一门编程语言中,布尔操作符的重要性堪比相等操作符。如果没有测试两个值关系的能力,那么诸如if...else和循环之类的语句就不会有用武之地了。在像javascript这样弱类型语言更有其妙用,让我们的代码,简捷可靠。布尔操作符一共有3个: 与、或、非。
特性:
非
先来讨论一下,最简单的‘非!’
相对与和或来说,非更简单一点,先把操作数转换为布尔值,再取反,值不是true,就是false.
结论:逻辑非的返回值最后只有两个:true or false.
与和或:
而与和或并不总是返回布尔值,&&和||操作主要遵循几大原则:
1.短路操作原则:如果第一个操作数能决定操作结果,就不会再对第二个操作数求值,直接返回第一个操作值。
2.求值过程中会被转型生成副本,但是返回值是原来值;
javascript中的逻辑操作中的&&与||操作并不是总是返回True和False,它返回的值是最后确定结果的值,例:
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)