【转,未整理】

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逻辑与,或,非的更多相关文章

  1. JS 逻辑

    JS 逻辑 Boolean(逻辑)对象用于将非逻辑值转换为逻辑值(true 或者 false). Boolean 对象 您可以将 Boolean 对象理解为一个产生逻辑值的对象包装器. Boolean ...

  2. 微信小程序-06-详解介绍.js 逻辑层文件-注册页面

    上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: http ...

  3. [shell]shell 中| && || () {} 用法以及shell的逻辑与或非

    转自:https://www.jianshu.com/p/617c1ee1e46e | 运算符 管道符号,是unix一个很强大的功能,符号为一条竖线:"|".用法: command ...

  4. 微信小程序-05-详解介绍.js 逻辑层文件

    上一篇介绍了关于.json 的配置文件,本篇介绍关于.js 逻辑层文件 微信小程序-05-详解介绍.js 逻辑层文件 宝典官方文档: https://developers.weixin.qq.com/ ...

  5. js逻辑非同时两次使用 !!null

    今天遇到了“!!null”的写法,百度没有找到直接的解释,翻书在<javascript高级设计>P44找到了相应的解释: 同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数 ...

  6. JS 逻辑非!简单总结

    !""                  true!"aaa"          false""==false          true ...

  7. 你不得不知的逻辑或(||)与(&&)非(!)

    最近重新翻开原生JS,又得到很多不同的体会,虽然现在开发框架那么多,但很多思想都还是离不开原生的基础.今天呢,我就根据自己的学习总结一下逻辑与(&&)和(逻辑或(||)和逻辑非(!). ...

  8. JS严格模式和非严格模式的区别

    严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...

  9. 学JS的心路历程 -非同步执行

    JS是单线程的语言,也就是说同一时间只会执行一行程序,所以如果一段程序执行过久就会造成阻塞(blocking)的现象,必须等到它结束后才能执行下一段程序. 举个例子来说,如果我们今天要买便当,但是老板 ...

随机推荐

  1. MySQL server has gone away 的解决方法

    原文引用至:http://www.jb51.net/article/23781.htm,感谢! 可能原因:1.发送的SQL语句太长,以致超过了max_allowed_packet的大小,如果是这种原因 ...

  2. 【转】Xcode6 模拟器路径

    原文网址:http://www.cocoachina.com/bbs/read.php?tid-231024.html Xcode6发布后,出现了很多的变动,功能性的变动,在这里不进行过多的赘述,在W ...

  3. is_file和file_exists效率比较

    目前在弄文件缓存的时候用到了判定文件存在与否,is_file()还是file_exists()呢?is_file和file_exists两者效率比较起来,谁的运行速度更快呢?还是做个测试吧: 1 2 ...

  4. 支持多种浏览器的纯css下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 类库从自带的配置文件中获取信息(DLL文件 获取 DLL文件自带的配置信息) z

    http://blog.csdn.net/shuaishifu/article/details/19602059 类库调用自身所带的配置文件中的配置信息,而不是读取应用程序所带的配置信息.代码如下: ...

  6. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  7. Python函数练习:冒泡算法+快速排序(二分法)

    冒泡算法: #-*- coding: UTF-8 -*-#冒泡排序 def func(lt):if type(lt).__name__ !='list' and type(lt).__name__ ! ...

  8. Array.prototype.slice.call

    Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组 ,::'age'}; Array.prototype.slice.call(arr); ...

  9. Android调用系统自带的文件管理器进行文件选择并读取

    先调用: intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); //设置类型,我这里是任意类 ...

  10. 100offer 为专业程序打造的招聘平台

    引用一段100offer的简介 优秀程序员最高效的求职方式 您是名优秀的程序员,很多公司都想邀请您加入,您也有一颗躁动的心.可是,换一份工作对于您,是件机会成本很高的事情.您想一次性看很多个不错的机会 ...