js逻辑与,或,非
【转,未整理】
1、逻辑非(!)
如果一个操作数是一个对象,返回true;
如果一个操作数是一个空字符串,返回false;
如果一个操作数是一个非空字符串,返回false;
如果一个操作数是一个数值0,返回false;
如果一个操作数是任意的非零字符,返回true;
如果一个操作数是null,返回false;
如果一个操作数是NaN,返回false;
如果一个操作数是undefined,返回true;
2、逻辑与(&&)
(1)对于布尔值,逻辑与是非常简单的,只要有一个false,就返回false;
(2)对于不是布尔值的情况则:
如果第一个操作数是对象,则返回第二个数
如果第二个操作数是对象,则只有在第一个操作数的求值结果为true的情况下才会返回该对象;
如果第两个操作数都是对象,则返回第二个数操作数
如果有一个操作数是null,则返回null
如果有一个操作数是NaN,则返回第NaN
如果第一个操作数是undefined,则返回unfined
上面确实难记,举例子来论证下会更方便记住
var obj={}; var a=(obj && null); alert(a) //null
var obj={}; var a=(null && obj); alert(a) //null
var obj={}; var a=(obj && undefined); alert(a) //undefined
var obj={}; var a=(undefined && obj); alert(a) //undefined
var obj={}; var a=(obj && NaN); alert(a) //NaN
var obj={}; var a=(NaN && obj ); alert(a) //NaN
var obj={};var obj2={} ; var a=(obj && obj2); alert(a==obj2) //true
对于逻辑与的短路问题:
举例1
<script type="text/javascript">
var found=true;var result=(found && someUdefinedVariable);alert(result);//显示someUdefinedVariable
//例子中的found为true,所以会对someUdefinedVariable继续求值,但是该变量未定义,所以会提示错误
</script>
举例2
<script type="text/javascript">
var found=false;var result=(found && someUdefinedVariable);alert(result);//显示false
//例子中的found为false,所以第一个操作数就已经能够决定结果,就不会在对第二个操作数求值
</script>
ps:对于逻辑与,如果第一个操作数十false,无论第二个操作数是什么,结果都不可能在世true
3、逻辑或(||)
(1)对于布尔值,逻辑或是非常简单的,只要有一个true,就返回true;
(2)对于不是布尔值的情况则:
如果第一个操作数是对象,则返第一个操作数
如果第一个操作数的求值结果为false,则返回第二个操作数
如果两个操作数都是对象,则返回第一个操作数
如果两个操作数是null,则返回null
如果两个操作数是NaN,则返回NaN
如果两个操作数是undefined,则返回undefined
例子1
<script type="text/javascript">
var found=true;
var result=(found || someUdefinedVariable);
alert(result);//弹出true
//对于逻辑与,当一个为true的时候,就不会在对第二个操作数进行求职了
</script>
js逻辑与,或,非的更多相关文章
- JS 逻辑
JS 逻辑 Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false). Boolean 对象 您可以将 Boolean 对象理解为一个产生逻辑值的对象包装器. Boolean ...
- 微信小程序-06-详解介绍.js 逻辑层文件-注册页面
上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: http ...
- [shell]shell 中| && || () {} 用法以及shell的逻辑与或非
转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|".用法: command ...
- 微信小程序-05-详解介绍.js 逻辑层文件
上一篇介绍了关于.json 的配置文件,本篇介绍关于.js 逻辑层文件 微信小程序-05-详解介绍.js 逻辑层文件 宝典官方文档: https://developers.weixin.qq.com/ ...
- js逻辑非同时两次使用 !!null
今天遇到了“!!null”的写法,百度没有找到直接的解释,翻书在<javascript高级设计>P44找到了相应的解释: 同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数 ...
- JS 逻辑非!简单总结
!"" true!"aaa" false""==false true ...
- 你不得不知的逻辑或(||)与(&&)非(!)
最近重新翻开原生JS,又得到很多不同的体会,虽然现在开发框架那么多,但很多思想都还是离不开原生的基础.今天呢,我就根据自己的学习总结一下逻辑与(&&)和(逻辑或(||)和逻辑非(!). ...
- JS严格模式和非严格模式的区别
严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...
- 学JS的心路历程 -非同步执行
JS是单线程的语言,也就是说同一时间只会执行一行程序,所以如果一段程序执行过久就会造成阻塞(blocking)的现象,必须等到它结束后才能执行下一段程序. 举个例子来说,如果我们今天要买便当,但是老板 ...
随机推荐
- An unexpected exception occurred while creating a change object. see the error log for more details
今天再给Android项目工程中的包重命名时出现了这个错误(之前重命名的时候就没有出现,郁闷): An unexpected exception occurred while creating a c ...
- RequireJS进阶(三) 转
进阶的前面两篇讲述了r.js如何通过命令行把所有的模块压缩为一个js文件或把所有的css压缩为一个css文件.其中包括一些压缩配置参数的使用. 但以上两种方式有几个问题 1.通过命令手动配置压缩选项显 ...
- 【转】WCF和ASP.NET Web API在应用上的选择
文章出处:http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html 在最近发布的Visual Studio 2012及.NET 4. ...
- nodejs 改变全局前缀
npm的包安装分为本地安装(local).全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已,比如: 复制代码 代码如下: npm install grunt # 本地安装npm ...
- Bootstrap-select:美化原生select
官网:http://silviomoreto.github.io/bootstrap-select/ 1.下载zip 2.html代码 <select class="selectpic ...
- .net core 中的序列化和反序列化
学习博客:http://www.voidcn.com/blog/dujingjing1230/article/p-1204454.html
- mybatis注解详解
首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则jar会根据你的pom配 ...
- OSX学习02之更新输入法
OSX下最好的输入法是什么?话说在使用Windows的时候就知道了——它叫鼠须管. 想必大家用Windows的时候,进入系统第一步就是先装输入法吧~ OSX也是一样,自带输入法虽然凑合,但是我们作为A ...
- 对于cocos2d-x lua的防护措施
自从cocos2d-x 用了 luajit之后,对于我们用lua开发的开发者来说,可是一个好消息,不单性能提升了不少,更重要的是在lua加密方面省了不少心,为什么,就是因为,luajit编译的字节码, ...
- Windows下安装GTK+
Step 1:到GTK官方网站上下载安装包.有32位的和64位,64位的有这句: Note that these 64-bit packages are experimental. Binary co ...