javascript逻辑运算符“||”和“&&”
一、先来说说||(逻辑或),从字面上来说,只有前后都是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逻辑运算符“||”和“&&”的更多相关文章
- javascript 逻辑运算符
javascript逻辑运算符 NOT(!) AND(&&) OR(||) NOT(!) 返回值的类型一定是Boolean值的 运算数也是Boolean值 返回值是:与相反的boole ...
- JavaScript逻辑运算符(操作数运算符)
1.概述 ||(或)和&&(与)都是逻辑运算符.但是或/与叫“逻辑运算符”不太合适,叫“操作数运算符”更合适! 因为||(或)和&&(与)返回的不是布尔值,而是两个操作 ...
- 探寻 JavaScript 逻辑运算符(与、或)的真谛
十二月已经过半,冬季是一个美妙的季节,寒冷的空气逼得人们不得不躲在安逸舒适的环境里生活.冬季会给人一种安静祥和的氛围,让人沉浸在其中,仿佛是一个旧的阶段的结束,同时也是一个新的阶段的开始.这么说来,西 ...
- JavaScript逻辑运算符
逻辑运算符 或与非:&& || ! ----------------------------------------------------------- ...
- JavaScript 比较和逻辑运算符
比较和逻辑运算符用于测试 true 或者 false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等. 给定 x=5,下面的表格解释了比较运算符: 实例 »实例 » 大于 大于或等于 ...
- JavaScript比较和逻辑运算符
JavaScript比较和逻辑运算符 JavaScript比较和逻辑运算符 比较和逻辑运算符用于测试true或者false. 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等 例如设定x ...
- 详细解析 JavaScript 获取元素的坐标
引言 最近突然看到了有关图片懒加载的问题,大致意思就是初始状态下页面只加载浏览器可视区域的图片,剩余图片在当浏览器可视区域滚动到其位置时才开始加载.貌似现在许多大型网站都有实现懒加载,所以我便就此问题 ...
- 【JavaScript运算符与表达式】
一.表达式 1.原始表达式:2.14,"test",true/false,null--复合表达式:10*20-- 2.数组.对象的初始化表达式:new Array(1,2),[1, ...
- web2 - JavaScript
JavaScript 知识要点 参考教材一 参考教材二 参考教材三 1.JavaScript 和 Java 的关系? 2.JavaScript 在编程中可以做什么? 3.如何在 html 中使用 Ja ...
随机推荐
- javaScript基础练习题-下拉框制作(JQuery)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- POJ1845Sumdiv(求所有因子和 + 唯一分解定理)
Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17387 Accepted: 4374 Descripti ...
- goto,void,extern,sizeof实例
1.#include <stdio.h>void func(int n){ int* p = NULL; if( n < 0 ) { goto ST ...
- 使用migrate.exe执行EF code first 迁移
Code First 迁移可用于从 Visual Studio 内部更新数据库,但也可通过命令行工具 migrate.exe 来执行.本页简单介绍如何使用 migrate.exe 对数据库执行迁移. ...
- 操作haproxy配置文件教师版
作用: 可查,可增,可删,可修改 #_*_coding:utf-8_*_ import os def file_handle(filename,backend_data,record_list=Non ...
- cmd批处理常用符号详解
cmd批处理常用符号详解 作者: 字体:[增加 减小] 类型:转载 我们在批处理编写过程中经常遇到各种特殊符号,很多朋友不是很清楚cmd中特殊符号的含义,这里简单的介绍下,方便需要的朋友 1.@一 ...
- 存储过程优点&缺点
存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的.其威力和优势主要体现在: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一 ...
- dedecms后台批量替换文章中的关键词
DEDECMS怎么样能快捷或者批量修改网站所有文章的超链接和锚文本,超链和所有关键词锚文本的链接需要修改? dedecms后台批量替换文章中的关键词
- cocos基础教程(5)数据结构介绍之cocos2d::Vector
cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...
- 新浪微博XSS攻击源代码下载(2012.06.28_sina_XSS.txt)
function createXHR(){ return window.XMLHttpRequest? new XMLHttpRequest(): new ActiveXObject("Mi ...