JavaScript:操作符:逻辑运算符及其隐式转换数据类型
逻辑非!
用来对布尔值进行取反,即
!true = false;当取反的变量不是布尔值,会进行隐式转换为布尔值:
- 非0的数字,都转换为true
- 非空字符串,转换为true
- 非空对象,转换为true
- Infinity = true
- 0,转换为false
- 空字符串,转换为false
- NaN = false
- null = false
- undefined = false
可以接连两次取反,即两个感叹号
!!;
逻辑与&&和逻辑或||
同数学意义上的与和或的概念一样;
逻辑与的优先级比逻辑或高;
短路运算,即运算符两端的两个逻辑表达式,当第一个逻辑表达式不符合条件时,就会得出结果,不会再去计算第二个逻辑表达式;
当逻辑表达式不是布尔值的结果时,会进行隐式转换为布尔值,但是最后运算结果,返回的不是布尔值,而是进行隐式转换之前的原结果;

上图可以很好的理解短路运算与隐式转换,来说明一下为什么是这样的输出结果:
上面逻辑运算符左右两边的两个逻辑表达式均为数字,非0的数字转为true,0转为false;
对于第一行代码,转换为
true && true,左边为true不能确定逻辑与运算结果,得再去计算右边的,右边也为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即2;对于第二行代码,转换为
false && true,左边为false可以直接确定逻辑与运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即0;对于第三行代码,转换为
true || false,左边为true可以直接确定逻辑或运算结果,此时计算停留在左侧,所以输出结果为左侧的原结果,即1;对于第四行代码,转换为
false || true,左边为false不能直接确定逻辑或运算结果,得再去计算右边的,右边为true,此时确定结果,并且最后计算停留在右侧,所以输出结果为右侧的原结果,即1;
JavaScript:操作符:逻辑运算符及其隐式转换数据类型的更多相关文章
- 21.C++- "++"操作符重载、隐式转换之explicit关键字、类的类型转换函数
++操作符重载 ++操作符分为前置++和后置++,比如: ++a; a++; ++操作符可以进行全局函数或成员函数重载 重载前置++操作符不需要参数 重载后置++操作符需要一个int类型的占位参数 ...
- JavaScript中关于隐式转换的一些总结
JavaScript运算符中的隐式转换规律:一.递增递减运算符(前置.后置)1.如果包含的是有效数字字符串或者是有效浮点数字符串,则会将字符串转换(Number())为数值,再进行加减操作,返回值的类 ...
- 每天多一点(2016.12.04)》Javascript隐式转换
乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...
- Javascript隐式转换
乱想 javascript为什么需要隐式转换?如果没有会出现什么情况? 找了一圈没有看到关于这个的讨论,只好自己研究了,可能不一定正确,自行辨知. 郁闷就是郁闷在好好的,为什么要搞个隐式转换,一般来讲 ...
- javascript隐式转换详解
Javascript是web前端开发的必学技术,今天和大家分享的就是javascript的基础知识隐式转换,希望可以帮助大家更好的学习. 转换成布尔类型假 undefined->falSe nu ...
- ECMAScript1.1 js书写位置 | 声明变量 | 基本数据类型 | 数据类型转换 | 操作符 | 布尔类型的隐式转换
js书写位置 由于在写css样式时使用的时双引号,所以我们在写js代码时建议使用单引号(‘’)! 行内式 <input type="button" value="点 ...
- JavaScript学习笔记——数据类型强制转换和隐式转换
javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...
- JavaScript的六种数据类型与隐式转换
一.六种数据类型 javascript的数据类型包括: (1)基本数据类型:number.string.boolean.null.undefined (2)对象:object object又包括Fun ...
- javascript笔记整理(数据类型强制/隐式转换 )
A.数据类型强制转换 1.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 var a=false;alert(Number(a)); ...
- JavaScript复习之--javascript数据类型隐式转换
JavaScript数据类型隐式转换.一,函数类 isNaN() 该函数会对参数进行隐式的Number()转换,如果转换不成功则返回true. alert() 输出的内容隐式的 ...
随机推荐
- Hbase之理论
第1章 HBase简介 1.1 什么是HBase HBase的原型是Google的BigTable论文,受到了该论文思想的启发,目前作为Hadoop的子项目来开发维护,用于支持结构化的数据存储. 官方 ...
- wampServer配置WWW根目录遇到的坑
直接在官网下载之后开始安装,一切正常 打开使用,一切正常 设置WWW目录.坑了一波 按照的都是百度上的教程,设置httpd.conf 这里配置之后网页访问127.0.0.1 还是localhost都还 ...
- python学习笔记---流程控制
二.流程控制 2.1选择结构与语句 2.1.1 最简单的if语句 注意:if语句后边必须加上冒号 满足条件后.可以执行多条语句. #最简单的if语句 print("请输入一个既能整除2,又能 ...
- VS code 如何使用HTML Boilerplate插件
此插件是一个HTML 模版插件,可以摆脱为 HTML 新文件重新编写头部和正文标签的苦恼. 只需在空文件中输入 html,并按 tab 键,即可生成干净的文档结构.也可以输入!,然后按tab键或者en ...
- html小总结(哪些可以直接设置高度和宽度)
(1)当然块级元素是可以直接设置高度和宽度的 块级元素:块级大多为结构性标记 div.h1~h6.ul.ol.dl.form.table.p.hr.pre.address.center.blockqu ...
- 五、Python操作redis
五.Python操作redis 一.python对redis基本操作 (1)连接redis # 方式1 import redis r = redis.Redis(host='127.0.0.1', p ...
- Karmada大规模测试报告发布:突破100倍集群规模
摘要:在本文中,我们将介绍用于测试的相关指标,如何进行大规模测试,以及我们如何实现大规模的集群接入. 本文分享自华为云社区<突破100倍集群规模!Karmada大规模测试报告发布>,作者: ...
- PHPMQTT问题一二三
问题一:PHPMQTT作为客户端订阅超过一定数量的主题后,系统就会报错. 思路:在网上查找原因,失败: 打开调试debug = true ; 结果proc方法中报错: eof receive 问题二: ...
- HDLBits答案——Verification: Reading Simulations
1 Finding bugs in code 1.1 Bugs mux2 module top_module ( input sel, input [7:0] a, input [7:0] b, ou ...
- FluentFTP能连接却报未将对象引用设置到对象的实例。
本来项目中用的好好的FTP下载传输,不知道从什么时候开始读取不到了,也上传不了.实际读取的是本地缓存的.因为同事上传不了文件和图片才发现.上源码! #region 下载文件 static byte[] ...