JavaScript - javascript 中的 "||" 与 "&&" 的理解与灵活运
你肯定见到过这样的代码:a = a||"xxx".
它其实就等价于下面三种形式的代码:
a = a || "xxx";
与:
if (!a) {
a = "xxx";
}
和:
if (a == null || a == "" || a == undefined) {
a = "xxx";
}
如何理解三种代码。首先必须理解一个问题: javascript 中的数据类型在与bool类型转换时候发生了什么?
javascript中,数据类型可以分为 “真值” 和 “假值”。也就是说,真值转换为bool类型时,为true; 假值转换为bool类型时,为false。下列为了一些常见的数据类型转为bool类型时的值:
| 数据类型 | 转换为bool后的值 |
| null | FALSE |
| undefined | FALSE |
| Object | TRUE |
| function | TRUE |
| 0 | FALSE |
| 1 | TRUE |
| 0、1之外的数字 | TRUE |
| 字符串 | TRUE |
| ""(空字符串) | FALSE |
在 if表达式中,javascript 首先将条件表达式转换为bool类型,表达式为真值则执行 if 中的逻辑, 否则跳过。
那么,再来看看 “&&” 和 “||” 这两个javascript 表达式。 javascript 是若类型预言,所以在javascript中这两个表达式可能跟其他语言中不太一样。
&& 的运算法则如下:
如果 && 左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。
也就是说:
var i = "" && "真值"; // -> i = "";
i = "真值" && "其他真值"; // -> i = "其他真值"
i = "真值" && ""; // -> i = ""
|| 的运算法则如下:
如果|| 左侧表达式的值为真值,则返回左侧表达式的值;否则返回右侧表达式的值。
var i = "" || "真值"; // -> i = "真值";
i = "真值" || "其他真值"; // -> i = "真值"
i = "真值" || ""; // -> i = "真值"
这样也就可以理解 a = a || "xxx"; 的逻辑了:如果 a 为假值 (等于null, 空字符串 "" ....),则 "xxx" 赋给 a; 否则,将 a 的值赋给 a 本身.
下面举例应用,运用 || 和 && 来简化程序:
var parameter="";
function test(parameter){
//return 真值
return true;
} //真值操作
function operate1(parameter){
return "真值操作";
} //假值操作
function operate2(parameter){
return "假值操作";
} var result=test(parameter)&&operate1(parameter);
result=test(parameter)||operate2(parameter); //等价于
result=test(parameter)?operate1(parameter):operate2(parameter); alert(result); //真值操作 //也等价于
if(test(parameter)){
result=operate1(parameter);
}else{
result=operate2(parameter);
} alert(result) //真值操作
JACK
@@ 12/11/2014 NJ USA
JavaScript - javascript 中的 "||" 与 "&&" 的理解与灵活运的更多相关文章
- 图说js中的this——深入理解javascript中this指针
没搞错吧!js写了那么多年,this还是会搞错!没搞错,javascript就是回搞错! ………… 文章来源自——周陆军的个人网站:http://zhoulujun.cn/zhoulujun/html ...
- 对于JavaScript中this关键字的理解
这是我第二遍学this了,第一遍学的懵懵的.this指哪里都是凭我一个男人的直觉然后控制台输出看看对不对. 刚查了书.博客.视频.理解差不多了.毕竟菜鸡me: 一.首先介绍下什么是this this是 ...
- javascript学习中自己对作用域和作用域链理解
在javascript学习中作用域和作用域链还是相对难理解些,下面我关于javascript作用域和作用域链做一下详细介绍,给各位初学者答疑解惑. 首先我们介绍一下什么是作用域? 从字面上理解就是起 ...
- JavaScript jQuery 中定义数组与操作及jquery数组操作
首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...
- JavaScript "自"运行-setInertval()和setTimeout()理解
setInterval()和clearInterval() var result = "Y"; function onOk() { var tid = setInterval(fu ...
- Javascript Jquery 中的数组定义与操作_子木玲_新浪博客
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- js对象详解(JavaScript对象深度剖析,深度理解js对象)
js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...
- javascript编写一个简单的编译器(理解抽象语法树AST)
javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...
- JavaScript 原型中的哲学思想
学习JavaScript过程中,原型问题一直让我疑惑许久,那时候捧着那本著名的红皮书,看到有关原型的讲解时,总是心存疑虑.当在JavaScript世界中走过不少旅程之后,再次萌发起研究这部分知识的欲望 ...
随机推荐
- .net使用cefsharp开源库开发chrome浏览器(一)
一.背景 公司现在使用.NET技术,有web组.有winfrom桌面组.而这两组团队业务部分有分多相似的地方,使用的数据源也是相同的,以此造成两组团队之间做了很多彼此都已经做过的工作. 有什么办法使得 ...
- paip.网页右键复制菜单限制解除解决方案
paip.网页右键复制菜单限制解除解决方案 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net ...
- fir.im Weekly - 工欲善其事,必先利其器
这周为大家搜罗了一些优秀的 GitHub 资源.APP开发工具.产品UI设计资源等等,同时也有一些程序员个人成长的Tips,"软硬件兼备"也许事半功倍不只是梦! Open-Sour ...
- iOS开发——高级技术&蓝牙服务
蓝牙服务 蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的 ...
- 出现Bad command or the file name的原因
出现Bad command or file name的原因 中文释义:错误的命令或文件名 . 错误原因:不能识别输入的命令 . 方法:检查所输入的指令是否正确,包括拼写和大小写等情况.
- VAG DMA protocol
Func 0a - RAM Read 0A Func 0a - ROM Read 0A Func 0a - EEPROM Read FD Func 0C xx - EEPROM Write 0A Fu ...
- spring 4.2.0后jdbcTemplate中不用queryForLong了(之系统升级发现)
在spring 3.2.2之后,jdbcTemplate.queryForInt已经被取消了! 原来是这样写的: String sql = "SELECT count(*) FROM USE ...
- Linux驱动开发学习笔记(1):LINUX驱动版本的hello world
1.关于目录 /lib/modules/2.6.9-42.ELsmp/build/ 这个是内核源码所在的目录 一般使用这样的命令进入这个目录:cd /lib/modules/$(una ...
- 关于ios中得路径详细讲解
利用create groups for any added folders 这样的方式表示的是将所有的资源都放在资源包得路径下,没有层次的概念利用create folder references fo ...
- vps主机修改系统远程端口号/添加防火墙
3389端口是远程终端服务端口,Windows 系统中的远程终端服务是一项功能非常强大的服务,同时也成了入侵者长驻主机的通道,入侵者可以利用一些手段得到管理员账号和密码并入侵主机. 众所周知,入侵者一 ...