Js 布尔值操作符
在js中,逻辑与(&&) 和 逻辑或(||)可以对任意的数据类型进行操作,而在高级程序设计中只给出了一系列的规则,并没有进行解释,所以经常记不住。在读其它书籍的时候,读到了它的原理,其实也很简单,不过还是要记一下。
逻辑与在对其它数据类型进行操作的时候,会对第一个操作数先进行布尔类型进行转换,看看它是true,还是false, 如果是false的话,它就会返回第一个操作数,如果是true, 它就会对第二个操作符进行计算,返回第二个操作符,因为它是一种短路操作。
如果第一个操作数是对象,它就会返回第二个操作数,因为,第一个操作数是对象,在进行布尔类型操作的时候,它永远是true, 所以对第二个数进行操作,返回它。
如果有一个操作数是null,undefined, NaN,则返回它们。
如果第一个操作符是null, undefined, NaN, 对它们进行布尔类型转换,是false, 根据短路原则,不用对第二个操作数进行操作,直接返回第一个操作数, 返回null, undefined, NaN; 如果第二个操作数是null, undefined, NaN, 在第一个操作作是true的情况下,它自然会返回。
逻辑或(||)的操作原理也是一样,只不过,只要有一个是true, 它就返回true, 所以逻辑或在对其它数据类型进行操作的时候,只要第一个操作数进行布尔类型转换的时候返回为true,就返回第一个操作数,否则返回第二个操作数,因为这也是短路操作。
如果第一个操作数是对象,则返回第一个操作数,因为对象转换为布尔值都是true,所以直接返回,不用对第二个操作数进行操作。
如果两个值都是null ,则返回null. 因为第一个操作数是null,它为false,会对第二个操作符,进行操作,然后返回。所以返回第二个操作数null.

Js 布尔值操作符的更多相关文章
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
- JS布尔值(Boolean)转换规则
原文作者: louis 原文链接: http://louiszhai.github.io/2015/12/11/js.boolean/ 语法 众所周知, JavaScript有五个基本的值类型:num ...
- js布尔值转化
JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值.转换规则是除了下面六个值被转为false,其他值都视为true. undefined null false 0 Na ...
- js 布尔值作为开关判断
var flag = true; $("#more_info").click(function() { if( flag ){ $("#more_xl_more" ...
- js中对象转化成字符串、数字或布尔值的转化规则
js中对象可以转化成 字符串.数字.布尔值 一.对象转化成字符串: 规则: 1.如果对象有toString方法,则调用该方法,并返回相应的结果:(代码通常会执行到这,因为在所有对象中都有toStrin ...
- js中等性操作符(==)、关系操作符(<,>)和布尔操作符(!)比较规则
最近一直在笔试面试,经常碰到例如 123=='123'.'abc'==true等问题,其中有答对的,也有答错的,主要原因还是对ECMAScript的规范没有理解清楚,很多题目没有具体分析所导致.现查阅 ...
- JS规则 多样化的我(变量赋值)我们使用"="号给变量存储内容,你可以把任何东西存储在变量里,如数值、字符串、布尔值等,
多样化的我(变量赋值) 我们可以把变量看做一个盒子,盒子用来存放物品,那如何在变量中存储内容呢? 我们使用"="号给变量存储内容,看下面的语句: var mynum = 5 ; / ...
- js中布尔值为false的六种情况
下面6种值转化为布尔值时为false,其他转化都为true 1.undefined(未定义,找不到值时出现) 2.null(代表空值) 3.false(布尔值的false,字符串"false ...
- JS基础_非布尔值的与或运算
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- Java多线程(二)——常用的实现多线程的两种方式
一.继承Thread类创建线程类 Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码. ...
- oracle expdp导出时报 ora-39070:无法打开日志文件
在通过expdp导出命令导出某个用户的对象时出现以下截图错误: ORA-39002:操作无效 ORA-39070:无法打开日志文件 ORA-39087:目录名<directory>无效 该 ...
- CentOS 6 升级 curl
zabbix 发邮件报 Support for SMTP authentication was not compiled in 其实出现这种问题的原因是我们机器上的 libcurl 版本太低所致.在z ...
- SVN插件和Tomcat插件地址
SVN插件: http://subclipse.tigris.org/update_1.8.x Tomcat插件: http://tomcatplugin.sf.net/update 备注:如果svn ...
- python中*args,**kwargs
*args :当我们不知道要有多少个参数传给函数,或者我们想把一个列表或者tuple存起来以后传给函数. **kwargs:当我们不知道有多少个关键字参数要传给函数,或者我们想把字典存起来以后传给函 ...
- c++局部变量在外可用的方法
C++的局部变量在作用域结束后,一般都会被回收.如下面这段代码 map<a*, b*> _map; void fun() { a _a; b _b; _map[&_a] = &am ...
- linux中mariadb的安装
在Linux中mariaDB的安装 MariaDB其实就是MySQL的分支,是为了应对MySQL的即将的闭源风险所产生的. Linux系统中软件包的格式为mysql.rpm格式. 通过yum去安装 L ...
- mysql常用命令行操作(二):表和库的操作、引擎、聚合函数
一.查看.创建.删除数据库 create database library default character set utf8 collate utf8_general_ci; # 创建数据库并设置 ...
- 阿里云ECS服务器云监控(cloudmonitor)Go语言版本插件安装卸载与维护
云监控Go语言版本插件安装_主机监控_用户指南_云监控-阿里云https://help.aliyun.com/document_detail/97929.html 云监控cloudmonitor 1. ...
- vim 永久添加行号
sudo vi /etc/vim/vimrc 打开vimrc文件,最下面添加set nu,保存就可以添加行号了,set autoindent是自动换行