布尔操作符解析

  在一门编程语言中,布尔操作符的重要性堪比相等操作符。如果没有测试两个值关系的能力,那么诸如if...else和循环之类的语句就不会有用武之地了。

  布尔操作符一共有3个: 非、与、或

  1、逻辑 非
  逻辑非用!表示,可以应用与ECMAScript的任何类型的值,逻辑非操作返回的是一个布尔值(true/false)。该操作符首先会将它的操作数转换为一个布尔值,然后再对其求反。

下面说明下Boolean()转型函数的一组规则。

数据类型 转换为true的值 转换为false的值
Boolean true false
String   任何非空字符串 ""(空字符串)
Number  任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined  无 undefined

Boolean()转型函数的简便表示方法。-----------!!

  2、逻辑 与

逻辑与操作符由两个和号(&&)表示,有两个操作数。

逻辑与操作可以应用于任何类型的操作数,而不仅仅是布尔值。在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值;此时,它遵循一下规则:

1. 如果第一个操作数是对象,则返回第二个操作数;
2. 如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
3. 如果两个操作符都是对象,则返回第二个操作数; 遵循第一规则。
4. 如果有一个操作是null,则返回null;
5. 如果有一个操作符是NaN,则返回NaN;
6. 如果有一个操作符是undefined,则返回undefined。

逻辑与操作属于短路操作,即如果第一操作数能够决定结果,那么就不会再对第二个操作数求值。(可以理解为内部的两个return操作)。因此当4、5、6规则冲突时,遵循短路操作原则。

代码如下:

var nul = null;
var na = NaN;
var test;
test = na&&nul;
document.write(test); //NaN

代码如下:

var nul = null;
var na = NaN;
var test;
test = nul&&na;
document.write(test); //null

因此,我们来总结一下。&&操作主要遵循几大原则:

1.短路操作原则;
2.求值过程中会被转型生成副本,但是返回值是原来值;

复制代码 代码如下:

// 伪代码
function &&(param1,param2){
bparam1 = Boolean(param1);
if (!bparam1) return param1;
bparam2 = Boolean(param2);
return param2;
}
// 参数是一个对象时返回引用的指针值,函数同

  3、逻辑或

逻辑或符号由两个竖线符号(||)表示。
逻辑或符号同样是短路操作符。其实现过程可以参照逻辑与的伪代码。这里就不再列出一些规则了。
逻辑或常常用来做参数的缺省处理,比如 evt = evt || window.event;

时间: 2024-09-28 22:28:11

布尔操作符解析的相关文章

Javascript 布尔操作符总结

在一门编程语言中,布尔操作符的重要性堪比相等操作符.如果没有测试两个值关系的能力,那么诸如if...else和循环之类的语句就不会有用武之地了.在像javascript这样弱类型语言更有其妙用,让我们的代码,简捷可靠.布尔操作符一共有3个: 与.或.非. 特性: 非 先来讨论一下,最简单的‘非!’ 相对与和或来说,非更简单一点,先把操作数转换为布尔值,再取反,值不是true,就是false. 结论:逻辑非的返回值最后只有两个:true or false.       与和或: 而与和或并不总是返

js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则

最近一直在笔试面试,经常碰到例如 123=='123'.'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致.现查阅资料后对此进行一些总结. 等性操作符(==) 1.比较的类型是String.Number.Boolean这几个基本类型时 当是这几中类型进行比较时,会先将两边转换成数字,在进行比较. 1 console.log(1 == true); // true转换成数字为1,因此结果为true 2 3 con

RxJava操作符——条件和布尔操作符(Conditional and Boolean Operators)

RxJava系列教程: 1. RxJava使用介绍 [视频教程] 2. RxJava操作符 ? Creating Observables(Observable的创建操作符) [视频教程] ? Transforming Observables(Observable的转换操作符) [视频教程] ? Filtering Observables(Observable的过滤操作符) [视频教程] ? Combining Observables(Observable的组合操作符) [视频教程] ? Erro

js布尔操作符小记

为了提高学习效率断了下网,没想到这么渣渣网断了之后就连不上了=.=废话少说,开始正题. 重新看红皮书,重点记一下布尔操作符.布尔操作符有 !,&&,||.  一,逻辑非 先说说 !, 非是布尔操作符中唯一一个会把所有数据类型转换为布尔类型的.拿几个特殊值为例: 如果操作数为 null,则 !null返回 true 如果操作数为 undefined,则 !undefined 返回true 如果操作数为 NaN,则 !NaN 返回true 有了 逻辑非,就可以用两个!!来判断一个数据类型的布尔

JS基本概念 -- 操作符 -- 布尔操作符

布尔操作符一共有三个: 非(Not).与(AND).或(OR) 逻辑非逻辑非操作符由一个叹号(!)表示,可以应用于ECMAScript中的任何值.无论这个值是什么类型,这个操作符都会返回一个布尔值.逻辑非操作符首先将他的操作数转换为一个布尔值,再对其求反. //1.如果操作数是一个对象,返回false var o = { name: "ss" }; alert(!o); //false var o1 = {}; alert(!o1); //false //2.如果操作数是一个空字符串,

布尔操作符

and . or .not  三个布尔操作符号用于比较布尔值 1.二元布尔操作符 如果两个布尔值都为True, and操作符就将表达式求值为True,否则求值为False:如下: >>> True and True True >>> True and False False >>> 以下为and的操作符的比较: 表达式 求值 True and True True True and False False False and True False Fal

布尔操作符-逻辑与(&&)

逻辑与(&&) 逻辑与操作符由两个和号(&&)表示,有两个操作数. 第一个操作数 第二个操作数 结果 true true true true false false false true false false false false 逻辑与操作可以应用与任何类型的操作数,而不仅仅是布尔值.在有一个操作数不是布尔值的情况下 ,逻辑与操作就不一定返回布尔值,此时,它遵循下列规则: •如果第一个操作数是对象,则返回第二个操作数: •如果第二个操作数是对象,则只有在第一个操作数的

布尔操作符-逻辑非(!)

逻辑非(!) 逻辑非操作符由一个叹号(!)表示. 无论这个值是什么数据类型,这个操作符都会返回一个布尔值.逻辑非操作符首先会将它的操作数转换为一个布尔值,然后再将其求反.逻辑非操作符遵循下列规则: •如果操作数是一个对象,返回false: •如果操作数是一个空字符串,返回true: •如果操作数是一个非空字符串,则返回false: •如果操作数是数值0,返回true: •如果操作数是任意非0数值(包括Infinity),返回false: •如果操作数是null,返回true: •如果操作数是Na

布尔操作符-逻辑或(||)

逻辑或(||) 逻辑或操作符由两个竖线符号(||)表示,有两个操作数. 第一个操作数 第二个操作数 结果 true true true true false true false true true false false false 与逻辑与操作相似,如果有一个操作数不是布尔值,逻辑或也不一定返回布尔值:此时,它遵循下列规则: •如果第一个操作数是对象,则返回第一个操作数: •如果第一个操作数的求值结果为false,则返回第二个操作数: •如果两个操作数都是对象,则返回第一个操作数; •如果两