一、先来说说||(逻辑或),从字面上来说,只有前后都是false的时候才返回false,否则返回true。

alert(true||false);    // true
alert(false||true); // true
alert(true||true); // true
alert(false||false); // false

但是,从深层意义上来说的话,却有另一番天地,试下面代码

alert(0||1);

显然,我们知道,前面0意味着false,而后面1意味着true,那么上面的结果应该是true,而事实返回的结果是1。再看下面代码:

alert(2||1);

我们知道,前面2是true,后面1也是true,那返回结果又是什么呢?测试结果是2,继续看:

alert('a'||1);

同样,前面'a'是true,后面1也是true;测试结果是'a',下面

alert(''||1);

由上,我们知道前面''是false,后面1是true,而返回结果是1。再看下面

alert('a'||0);

前面'a'是true,而后面0是false,返回结果是'a',继续下面

alert('a'||'b');

前面'a'是true,后面'b'是false,返回结果是'a',我们继续下面

alert(''||0);

前面''是false,后面0同样是false,返回结果是0

alert(0||'');

前面0是false,后面''是false,返回结果是''

这就意味

1、只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值。

2、只要“||”前面为true,不管“||”后面是true还是false,都返回“||”前面的值。

----------------------------------------------------------------------------------------------------------

二、下面说说&&(逻辑与),从字面上来说,只有前后都是true的时候才返回true,否则返回false。

alert(true&&false);    // false
alert(true&&true); // true
alert(false&&false); // false
alert(false&&true); // false

然后,根据上面经验,我们看看“&&”号前后,不单单是布尔类型的情况。

alert(''&&1);

结是返回'',“&&”前面''是false,后面是1是true。

alert(''&&0);

结是返回'',“&&”前面''是false,后面是0也是false。

alert('a'&&1);

结是返回1,“&&”前面''a是true,后面是1也是true。

alert('a'&&0);

结是返回0,“&&”前面''a是true,后面是0是false。

alert('a'&&'');

结是返回'',“&&”前面''a是true,后面是''是false。

alert(0&&'a');

结是返回0,“&&”前面''0是false,后面是'a'是true。

alert(0&&'');

结是返回0,“&&”前面''0是false,后面是''也是false。

这意味着

1、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

2、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

让我们总结一下:

1、只要“||”前面为false,无论“||”后面是true还是false,结果都返回“||”后面的值。

2、只要“||”前面为true,无论“||”后面是true还是false,结果都返回“||”前面的值。

3、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;

4、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;

由上两个测试可知,逻辑运算符,“||”和“&&”都是遵行短路原则,只要确定符号前面的真假,既可确定返回值。

需要说明的是“&&”的优先级是高于“||”的,下面测试:

alert(1||'a'&&2);

返回结果是1。

根据反证原理,我们假设“||”的优先级不低于“&&”(这里只所以用“不低于”,是为了同时证明等级相同的情况)。

根据上面我们得出的结论(1),(1||'a')将返回前面的值1,(1&&2)根据结论(4)应该返回后面的值2。这显然不对,由此可知“&&”的优先级是高于“||”的。

javascript逻辑运算符“||”和“&&”的更多相关文章

  1. javascript 逻辑运算符

    javascript逻辑运算符 NOT(!) AND(&&) OR(||) NOT(!) 返回值的类型一定是Boolean值的 运算数也是Boolean值 返回值是:与相反的boole ...

  2. JavaScript逻辑运算符(操作数运算符)

    1.概述 ||(或)和&&(与)都是逻辑运算符.但是或/与叫“逻辑运算符”不太合适,叫“操作数运算符”更合适! 因为||(或)和&&(与)返回的不是布尔值,而是两个操作 ...

  3. 探寻 JavaScript 逻辑运算符(与、或)的真谛

    十二月已经过半,冬季是一个美妙的季节,寒冷的空气逼得人们不得不躲在安逸舒适的环境里生活.冬季会给人一种安静祥和的氛围,让人沉浸在其中,仿佛是一个旧的阶段的结束,同时也是一个新的阶段的开始.这么说来,西 ...

  4. JavaScript逻辑运算符

               逻辑运算符   或与非:&&  ||  ! ----------------------------------------------------------- ...

  5. JavaScript 比较和逻辑运算符

    比较和逻辑运算符用于测试 true 或者 false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 给定 x=5,下面的表格解释了比较运算符: 实例 »实例 » 大于 大于或等于 ...

  6. JavaScript比较和逻辑运算符

    JavaScript比较和逻辑运算符 JavaScript比较和逻辑运算符 比较和逻辑运算符用于测试true或者false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等 例如设定x ...

  7. 详细解析 JavaScript 获取元素的坐标

    引言 最近突然看到了有关图片懒加载的问题,大致意思就是初始状态下页面只加载浏览器可视区域的图片,剩余图片在当浏览器可视区域滚动到其位置时才开始加载.貌似现在许多大型网站都有实现懒加载,所以我便就此问题 ...

  8. 【JavaScript运算符与表达式】

    一.表达式 1.原始表达式:2.14,"test",true/false,null--复合表达式:10*20-- 2.数组.对象的初始化表达式:new Array(1,2),[1, ...

  9. web2 - JavaScript

    JavaScript 知识要点 参考教材一 参考教材二 参考教材三 1.JavaScript 和 Java 的关系? 2.JavaScript 在编程中可以做什么? 3.如何在 html 中使用 Ja ...

随机推荐

  1. javaScript基础练习题-下拉框制作(JQuery)

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

  2. POJ1845Sumdiv(求所有因子和 + 唯一分解定理)

    Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 17387   Accepted: 4374 Descripti ...

  3. goto,void,extern,sizeof实例

    1.#include <stdio.h>void func(int n){    int* p = NULL;    if(  n < 0 )    {        goto ST ...

  4. 使用migrate.exe执行EF code first 迁移

    Code First 迁移可用于从 Visual Studio 内部更新数据库,但也可通过命令行工具 migrate.exe 来执行.本页简单介绍如何使用 migrate.exe 对数据库执行迁移. ...

  5. 操作haproxy配置文件教师版

    作用: 可查,可增,可删,可修改 #_*_coding:utf-8_*_ import os def file_handle(filename,backend_data,record_list=Non ...

  6. cmd批处理常用符号详解

    cmd批处理常用符号详解 作者: 字体:[增加 减小] 类型:转载 我们在批处理编写过程中经常遇到各种特殊符号,很多朋友不是很清楚cmd中特殊符号的含义,这里简单的介绍下,方便需要的朋友   1.@一 ...

  7. 存储过程优点&缺点

    存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的.其威力和优势主要体现在: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一 ...

  8. dedecms后台批量替换文章中的关键词

    DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词

  9. cocos基础教程(5)数据结构介绍之cocos2d::Vector

    cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...

  10. 新浪微博XSS攻击源代码下载(2012.06.28_sina_XSS.txt)

    function createXHR(){ return window.XMLHttpRequest? new XMLHttpRequest(): new ActiveXObject("Mi ...