javascript运算符——逻辑运算符全面解析_javascript技巧

前面的话

逻辑运算符对操作数进行布尔运算,经常和关系运算符一样配合使用。逻辑运算符将多个关系表达式组合起来组成一个更复杂的表达式。逻辑运算符分为逻辑非'!'、逻辑与'&&'、逻辑或'||'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++;
 }
}

逻辑与

逻辑与运算符由两个和号(&&)表示,有两个操作数,只有在两个操作数都为true时,结果才返回true,否则返回false

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

逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。如果其中一个操作数不是布尔值,则逻辑与操作不一定返回布尔值

逻辑与操作属于短路操作,如果第一个操作数能够决定结果,那么就不会再对第二个操作数求值

对于逻辑与而言,如果第一个操作数是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,则返回第一个操作数;如果第一个操作数是fales,则结果的真假和第二个操作数的真假相同,则返回第二个操作数

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 || {};
}

以上就是小编为大家带来的javascript运算符——逻辑运算符全面解析全部内容了,希望大家多多支持~

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript逻辑运算符、java 逻辑运算符 解析、javascript 运算符、javascript三目运算符、javascript三元运算符,以便于您获取更多的相关知识。

时间: 2024-11-08 17:27:14

javascript运算符——逻辑运算符全面解析_javascript技巧的相关文章

复杂的javascript窗口分帧解析_javascript技巧

什么是窗口分帧?    窗口分帧就是把一个浏览器文档窗口分隔成多个窗口,每个窗口都可以显示一个独立的网页文件,每个帧(即页面)都有自己的url. 帧窗口该如何创建? 帧通常是由<frameset>和<frame>标记创建的.但在HTML 4中,<iframe>标记也可以用来在文档中创建"内联帧".就JavaScript来说,<iframe>创建的帧与<frameset>和<frame>创建的帧一样. 在HTML中用

javascript操作referer详细解析_javascript技巧

Referrer的重要性HTTP请求中有一个referer的报文头,用来指明当前流量的来源参考页.例如在www.sina.com.cn/sports/上点击一个链接到达cctv.com首页,那么就referrer就是www.sina.com.cn/sports/了.在Javascript中,我们可以通过document.referrer来获取同样的信息.通过这个信息,我们就可以知道访客是从什么渠道来到当前页面的.这对于Web Analytics来说,是非常重要的,这可以告诉我们不同渠道带来的流量

JavaScript组成、引入、输出、运算符基础知识讲解_javascript技巧

javascript简介: JavaScript 是属于网络的脚本语言! JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用. JavaScript 是因特网上最流行的脚本语言. 下文重点给大家介绍js组成,引入,输出,运算符基础知识,具体详解如下所示: JavaScript组成: ECMAscript 浏览器对象模型 BOM 文档对象模型 DOM // ecmascript bom dom dom (文档对象模型) 用来访问和操纵htm

JavaScript作用域链使用介绍_javascript技巧

之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时候发现作用域和执行环境确实很重要,又很基础,对理解JavaScript闭包很有帮助,所以在写一篇对作用域和执行环境的理解. 作用域 作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JavaScript中变量的作用域有全局作用域和局部作用域. 单纯的JavaScript作用域还

详细讲解JavaScript中的this绑定_javascript技巧

this 可以说是 javascript 中最耐人寻味的一个特性,就像高中英语里各种时态,比如被动时态,过去时,现在时,过去进行时一样,无论弄错过多少次,下一次依然可能弄错.本文启发于<你不知道的JavaScript上卷>,对 javasript 中的 this 进行一个总结. 学习 this 的第一步就是明白 this 既不是指向函数自身也不指向函数的作用域.this 实际上是在函数被调用时发生的绑定,它指向什么地方完全取决于函数在哪里被调用. 默认绑定 在 javascript 中 ,最常

JavaScript自定义日期格式化函数详细解析_javascript技巧

我们对 JavaScript 扩展其中一个较常的做法便是对 Date.prototype 的扩展.因为我们知道,Date 类只提供了若干获取日期元素的方法,如 getDate(),getMinute()--却没有一个转换为特定字符串的格式化方法.故所以,利用这些细微的方法,加以封装,组合我们想要的日期字符串形式.一般来说,该格式化函数可以定义在 Date 对象的原型身上,也可以独立一个方法写出.定义原型方法的操作如 Date.prototype.format = function(date){-

Javascript类型转换的规则实例解析_javascript技巧

类型转换可以分为隐式转换和显式转换,所谓隐式转换即程序在运行时进行的自动转换,显式转换则是人为的对类型进行强制转换.Javascript的变量是松散类型的,它可以存储Javascript支持的任何数据类型,其变量的类型可以在运行时被动态改变.请看示 例: var n = 10; n = "hello CSSer!"; n = {}; 上面的示例中,首先声明n变量并初始化其值为10(整数类型),接着将字符串"hello CSSer!"赋值给n,接着再赋一个对象给它,最

JavaScript设计模式之单体模式全面解析_javascript技巧

单体是一个用来划分命名空间并将一些相关的属性与方法组织在一起的对象,如果她可以被实例化的话,那她只能被实例化一次(她只能嫁一次,不能二婚). 单体模式是javascript里面最基本但也是最有用的模式之一. 特点: 1. 可以用来划分命名空间,从而清除全局变量所带来的危险或影响. 2. 利用分支技术来来封装浏览器之间的差异. 3. 可以把代码组织的更为一体,便于阅读和维护. 单体模式的基本写法: /* 最基本的单体模式 */ var her = { name: 'Anna', sex: 'wom

解析Javascript小括号“()”的多义性_javascript技巧

Javascript中小括号有五种语义 语义1,函数声明时参数表 复制代码 代码如下: function func(arg1,arg2){   // ... } 语义2,和一些语句联合使用以达到某些限定作用 复制代码 代码如下: // 和for in一起使用 for(var a in obj){   // ... } // 和if一起使用 if(boo){   //... } // 和while一起使用 while(boo){   // ... } // 和do while一起使用 do{