你是否看到过这样的代码: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 “||”、“”的运用相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 【JavaScript总结】JavaScript语法基础:JS高级语法

    作用域链: 1.JS中只有函数能够限定作用域的范围: 2.变量处理在制定的函数范围内,还有一个特殊的作用域,就是没有用var 声明的全局作用域 3.js中的作用域链是为了清晰的表示出所有变量的作用范围 ...

  3. 【JavaScript总结】JavaScript语法基础:DOM

    ->DOM的理解:文档对应dom树 ->有了DOM能做什么:DOM的操作 html文档做为DOM树模型,DOM树的节点就是对象.对象会触发事件来执行一些事件代码. C#中的事件是一个委托变 ...

  4. 【JavaScript总结】JavaScript语法基础:JS编码

    运算符 数学:+. -. *. / 逻辑:>. < .>= .<=. == . !=.&&.|| . === .!==(完全等于) 对象相关 new delet ...

  5. 【JavaScript总结】JavaScript语法基础:数据类型

    ------>数据类型有哪些? ->基本类型:数字类型,布尔类型,字符串类型 ->引用类型:对象类型,函数类型 ->空类型:null 和 undefined ->运算符: ...

  6. 【JavaScript总结】JavaScript发展与学习内容

    发展: 最初浏览器是为大学里浏览文档用,从地址栏输入文档地址,找到文档显示. 后来各种需求(购物网站,个人博客)出现,已有功能不能满足需求. 可人们依旧在努力满足这种需求,但实现后的效果很不尽人意. ...

  7. Python:模拟登录、点击和执行 JavaScript 语句案例

    案例一:网站模拟登录 # douban.pyfrom selenium import webdriver from selenium.webdriver.common.keys import Keys ...

  8. [JavaScript] JavaScript数组挖掘,不只是讲数组哟(2)

    课程来源:后盾人 上一篇的内容:[JavaScript] JavaScript数组挖掘,不只是讲数组哟 数组引用类型分析,多维数组,用Array.of为数组创建细节,类型检测与转换,在一个数组后面加一 ...

  9. [JavaScript] JavaScript 数组挖掘,不只是讲数组哟

    课程来源:后盾人 数组引用类型分析 数组的定义 const array = new Array('hello', 'dust', 1, 2, 3, 4, 5) console.log(array) l ...

  10. linux下用js生成xml,js2xml:将javascript字符串转换为xml

    有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在. var totalReviewsValue = 32; var averageRating = 4.5; if(t ...

最新文章

  1. 查看删除对象(活动目录快照配置管理系列五)
  2. 关于持续集成几点知识点
  3. JustForex开始提供比特币和比特币现金支付方式
  4. linux下载哪个python版本-Linux升级python版本
  5. 具有Spring Security的Grails
  6. spring boot: spring Aware的目的是为了让Bean获得Spring容器的服务
  7. Spring MVC对象转换说明
  8. 高阶java_Java高阶语法---final
  9. Eclipse使用问题
  10. Mac下Android 反编译
  11. 手机王者荣耀怎么投屏到电脑
  12. V4L2 pixel format 格式参考
  13. Tiptop CR报表axcr700采购入库月报增加tlf99“多角贸易序号”,部分资料无数据修复4gl文件bug
  14. gephi和python_python+nlp+Gephi 分析电视剧【人民的名义】
  15. 一度智信:拼多多平台推广有哪些
  16. 服务器安装windows2016选择磁盘时报错不能将系统安装到此盘符
  17. 忘了Linux服务器密码怎么办
  18. 代码随想录训练营day8
  19. SQL SERVER 的垂死挣扎
  20. 惠普服务器删除系统还原,惠普电脑系统还原的详细操作步骤

热门文章

  1. 个推应用统计产品(个数)Android集成实践
  2. 安装 PrestaShop 1.6 - 详细的安装指南
  3. 服务器性能估算参考(硬件-应用服务器)
  4. Unity AI副总裁Danny Lange:如何用AI助推游戏行业?
  5. 浅谈开发中的MVVM模式及与MVP和MVC的区别
  6. Mysql存储引擎中InnoDB与Myisam的区别
  7. 11--移除重复节点
  8. 学成在线--9.页面静态化
  9. svg 动画_根据AI导出的SVG path制作SVG线条动画
  10. 执行git命令时出现fatal: ‘origin‘ does not appear to be a git repository错误