ECMAScriptjavascript运算符——逻辑运算符

面前的语句

  逻辑运算符对操作数举办布尔运算,平常同涉运算符一样配合以。逻辑运算符将多独涉表明式组合起来做一个重复扑朔迷离的表达式。逻辑运算符分为逻辑非’!’、逻辑和’&&’、逻辑或’||’3种,本文将介绍这三栽逻辑运算符

 

逻辑非

  逻辑非操作符由一个叹号(!)表示,可以使用于ECMAScript中之任何价值。无论那价是呀数据类型,这些操作符都会面回来一个布尔值。逻辑非操作符首先会以它的操作数转换成为一个布尔值,然后重新指向这告反

  逻辑非对操作数转为布尔种的变换类型以及Boolean()转型函数平,只不过最终再以那些结果拿到反。而若又拔取有限独逻辑非操作符,实际上就会师套Boolean()转型函数的行事

console.log(!!undefined);//false
console.log(!!null);//false
console.log(!!0);//false
console.log(!!-0);//false
console.log(!!NaN);//false
console.log(!!'');//false
console.log(!!false);//false

console.log(!!{});//true
console.log(!![]);//true

console.log(!!new Boolean(false));//true
console.log(!!false);//false
console.log(!!new Boolean(null));//true
console.log(!!null);//false

  逻辑非运算符通常用于控制循环

//Boolean 变量(bFound)用于记录检索是否成功。找到问题中的数据项时,bFound 将被设置为true,!bFound将等于false,意味着运行将跳出while循环
var bFound = false;
var i = 0;
while (!bFound) {
  if (aValue[i] == vSearchValues) {
    bFound = true;
  } else {
    i++;
  }
}

 

ECMAScript,逻辑与

  逻辑和运算符由两单及号(&&)表示,有些许只操作数,只有当少数独操作数都也true时,结果才回来true,否则回false

//逻辑与(&&)的真值表
第一个操作数        第二个操作数        结果
true              true               true
true              false              false
false             true               false
false             false              false

  逻辑和操作可以利用被任何项目的操作数,而不仅是布尔值。尽管内部一个操作数不是布尔值,则逻辑与操作不肯定重回布尔值

  逻辑和操作属于短路操作,假诺第一只操作数可以支配结果,那么尽管无碰面重复对第二独操作数求值

  对于逻辑和而言,假使第一个操作数是false,则任第二单操作数是啊价值,结果都是false,则赶回第一只操作数;如若第一独操作数为true,则结果的真伪和次个操作数的真真假假相同,则赶回第二单操作数

//除了false、undefined、null、+0、-0、NaN、''这7个假值,其余都是真值
console.log('t' && ''); //因为't'是真值,所以返回''
console.log('t' && 'f'); //因为't'是真值,所以返回'f'
console.log('t' && 1 + 2); //因为't'是真值,所以返回3
console.log('' && 'f'); //因为''是假值,所以返回''
console.log('' && ''); //因为''是假值,所以返回''

var i = 1;
var result = (true && i++);
console.log(result,i);//因为true是真值,所以执行i++,i是2,result是1

var i = 1;
var result = (false && i++);
console.log(result,i);//因为false是假值,所以不执行i++,i是1,result是false

  逻辑与运算符可以基本上个连用,再次回到第一单布尔值为false的表明式的价值

console.log(true && 'foo' && '' && 4 && 'foo' && true);// ''

  关系运算符的先级比逻辑与(&&)和逻辑或(||)的先期级赛,所以类似表明式可以一向开,不用上圆括号

if(a+1==2 && b+2==3){
    //Todo    
}

  可以用逻辑和运算符来取代if结构

if (a == b) {
  doSomething();
}
// 等价于
(a == b) && doSomething();

  逻辑与运算符通常用于回调函数使用中 

//若没有给参数a传值,则a为默认的undefined,是假值,所以不执行a(),防止报错,如果给参数a传值,则执行函数a()
function fn(a){
    if(a){
        a();
    }
}
//等价于
function fn(a){
    a && a();
}

 

逻辑或

  逻辑或运算符由五只竖线(||)表示,有零星独操作数,只有在少个操作数都是false时,结果才回去false,否则回true

//逻辑或(||)的真值表
第一个操作数        第二个操作数        结果
true              true              true
true              false             true
false             true              true
false             false             false

  同地,逻辑或操作为足以使被另外项目标操作数,而不只是布尔值。要是内部一个操作数不是布尔值,则逻辑或操作不必然重临布尔值

  逻辑或操作也属于短路操作,假若第一只操作数能够控制结果,那么即便无晤面重复针对亚个操作数求值

  对于逻辑或而言,假如第一个操作数是true,则无第二单操作数是什么价值,结果如故true,则回第一只操作数;尽管第一独操作数是false,则结果的真假和第二单操作数的真伪相同,则回第二只操作数

console.log('t' || '');//因为't'是真值,所以返回"t"
console.log('t' || 'f');//因为't'是真值,所以返回"t"
console.log('' || 'f');//因为''是假值,所以返回"f"
console.log('' || '');//因为''是假值,所以返回""

var i = 1;
var result = (true || i++);
console.log(result,i);//因为true是真值,所以不执行i++,result是true,i是1

var i = 1;
var result = (false || i++);
console.log(result,i);//因为false是假值,所以执行i++,i是2,result是1

  同地,逻辑或运算符也足以多单连用,重返第一只布尔值为true的表明式的价值

console.log(false || 0 || '' || 4 || 'foo' || true);// 4

  逻辑或运算符常用于为变量设置默认值

//如果没有向参数p传入任何对象,则将该参数默认设置为空对象
function fn(p){
    p = p || {};
}

 

参考资料

【1】 ES5/表达式 https://www.w3.org/html/ig/zh/wiki/ES5/expressions
【2】 阮一峰Javascript标准参照教程——语法——布尔运算符
http://javascript.ruanyifeng.com/
【3】 W3School-Javascript高级教程——ECMAScript逻辑运算符
http://www.w3school.com.cn/
【4】《javascript权威指南(第6本)》第4章 表明式和运算符
【5】《javascript高级程序设计(第3本子)》第3章节 基本概念
【6】《javascript DOM编程艺术(第2版本)》第2章 Javascript语法