javascript “||”、“”的运用
你是否看到过这样的代码:a=a||""; 可能javascript初学者会对此感到茫然。今天就跟大家分享一下我的一些心得。
其实,以下三种方式是完全等价的
a=a||"defaultValue";
if(!a){a="defaultValue";}
if(a==null||a==""||a==undefined){a="defaultValue";}
为了弄清这个问题,首先我们必须了解一个问题: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中的逻辑,否则跳过。
于是有了:
if(!a){a="defaultValue";}
再来看“&&”、“||”两个表达式。
由于javascript是弱类型语言,所以在javascript中这两个表达式可能跟其他语言(比如java)中不太一样。
在javascript中,“&&”运算符运算法则如下:
如果&&左侧表达式的值为真值,则返回右侧表达式的值;否则返回左侧表达式的值。
这就是说:
var i=""&&"真值";//->i=""i="真值"&&"其他真值";//->i="其他真值"i="真值"&&"";//->i=""
一句话: &&若都为真返回最后一个;若有一个不为真,返回第一个为false(可能是fasle,0,undefined ,null,"")的值
于是,就可以理解:
a=a||"defaultValue";
的逻辑了。如果a为假值(等于null、空字符串……),则将"defaultValue"赋给a;否则将a的值赋给a本身。
一句话:||返回左面第一个真值;如果都为false,否则返回最后一个false(可能是false,0,undefined,null,"")的值
原贴地址: http://my249645546.iteye.com/blog/1553202
转载于:https://www.cnblogs.com/fuxinci/archive/2012/11/06/2756436.html
javascript “||”、“”的运用相关推荐
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 【JavaScript总结】JavaScript语法基础:JS高级语法
作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...
- 【JavaScript总结】JavaScript语法基础:DOM
->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...
- 【JavaScript总结】JavaScript语法基础:JS编码
运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...
- 【JavaScript总结】JavaScript语法基础:数据类型
------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...
- 【JavaScript总结】JavaScript发展与学习内容
发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...
- Python:模拟登录、点击和执行 JavaScript 语句案例
案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...
- [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)
课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...
- [JavaScript] JavaScript 数组挖掘,不只是讲数组哟
课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...
- linux下用js生成xml,js2xml:将javascript字符串转换为xml
有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...
最新文章
- 查看删除对象(活动目录快照配置管理系列五)
- 关于持续集成几点知识点
- JustForex开始提供比特币和比特币现金支付方式
- linux下载哪个python版本-Linux升级python版本
- 具有Spring Security的Grails
- spring boot: spring Aware的目的是为了让Bean获得Spring容器的服务
- Spring MVC对象转换说明
- 高阶java_Java高阶语法---final
- Eclipse使用问题
- Mac下Android 反编译
- 手机王者荣耀怎么投屏到电脑
- V4L2 pixel format 格式参考
- Tiptop CR报表axcr700采购入库月报增加tlf99“多角贸易序号”,部分资料无数据修复4gl文件bug
- gephi和python_python+nlp+Gephi 分析电视剧【人民的名义】
- 一度智信:拼多多平台推广有哪些
- 服务器安装windows2016选择磁盘时报错不能将系统安装到此盘符
- 忘了Linux服务器密码怎么办
- 代码随想录训练营day8
- SQL SERVER 的垂死挣扎
- 惠普服务器删除系统还原,惠普电脑系统还原的详细操作步骤
热门文章
- 个推应用统计产品(个数)Android集成实践
- 安装 PrestaShop 1.6 - 详细的安装指南
- 服务器性能估算参考(硬件-应用服务器)
- Unity AI副总裁Danny Lange:如何用AI助推游戏行业?
- 浅谈开发中的MVVM模式及与MVP和MVC的区别
- Mysql存储引擎中InnoDB与Myisam的区别
- 11--移除重复节点
- 学成在线--9.页面静态化
- svg 动画_根据AI导出的SVG path制作SVG线条动画
- 执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误