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后的值
nullFALSE
undefinedFALSE
ObjectTRUE
functionTRUE
0FALSE
1TRUE
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySql:函数总结

文章目录字符串函数数学函数日期和时间函数流程函数其他函数字符串函数 数学函数 日期和时间函数 流程函数 其他函数

endnote怎么和word关联_endnote x9怎么和word关联?Word中用EndNote X9教程

刚刚接触EndNote X9这款文献写作管理软件,不能熟练的在Word中用EndNote X9引入文献,不知道endnote x9怎么和word关联。这里小编为大家带来了Word中用EndNote X9教程,一起来看看吧!下载安装好 word2019与endnote X9打开系统偏好设置…

[Hands On ML] 6. 决策树

文章目录1. 训练与可视化2. 分类预测3. 模型参数4. 回归5. 不稳定性本文为《机器学习实战:基于Scikit-Learn和TensorFlow》的读书笔记。 中文翻译参考 《统计学习方法》决策树笔记 决策树可以分类,也可以回归,还有多输出任务 是随机森林的基…

【转载】KMP算法详解

如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢 这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符…

LeetCode MySQL 1459. 矩形面积

文章目录1. 题目2. 解题1. 题目 表: Points ------------------------ | Column Name | Type | ------------------------ | id | int | | x_value | int | | y_value | int | ------------------------ id 是该表主键. 每个点都表示…

mesh和wifi中继的区别_小米官方科普路由器Mesh功能,它和普通的中继有什么区别...

原标题:小米官方科普路由器Mesh功能,它和普通的中继有什么区别不知道各位在选购路由器的时候会不会关注路由器的Mesh组网功能,也可能有许多小伙伴在购买选购路由器的时候没有很关注过相关的功能和参数。而最近,小米就将其旗下的AX…

STP分析--保险公司客户分类分析(采用SPSS进行分析)

文章目录研究目的:精准营销研究内容:客户分类维度数据获取与处理设计调查问卷及确定调研计划数据处理数据分析架构客户细分目标客户选择目标客户定位数据分析与输出结果确定分类维度分类维度的消减适应性检验因子提取因子旋转因子命名计算因子得分设置因…

详解Objective-C消息传递机制

Objective-C获取消息工作机制是本文要介绍的内容,看name mangling的时候,也讲到了Objective-C的name mangling,于是又重新读了一下Objective-C 2.0 programming Language以及Objective-C 2.0 Runtime Reference里的相关内容,自己归纳一下 。…

vuedraggable示例_vuedraggable快速入门

value和list这两个都可以给一个draggable注入数据源:/*value注入数据源*/export default {data() {return {list:[{name:aaa,id:1,},{name:bbb,id:2,}]};}}/*list注入数据源头*/export default {data() {return {list:[{name:aaa,id:1,},{name:bbb,id:2,}]};}}它们的…

LeetCode MySQL 1468. 计算税后工资

文章目录1. 题目2. 解题1. 题目 Salaries 表: ------------------------ | Column Name | Type | ------------------------ | company_id | int | | employee_id | int | | employee_name | varchar | | salary | int | ----------…

ETL详解

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时…

博客园

为更好的分享本人的博客,本人在博客园地址:http://www.cnblogs.com/blogyuan/,里面也有博文,本博客将不定期将两个博客上的博文同步,欢迎转载! 转载于:https://www.cnblogs.com/blogyuan/archive/2012/11/0…

LeetCode MySQL 1421. 净现值查询

文章目录1. 题目2. 解题1. 题目 表: NPV ------------------------ | Column Name | Type | ------------------------ | id | int | | year | int | | npv | int | ------------------------ (id, year) 是该表主键. 该表有…

apache大师+伪静态_Apache开启伪静态示例

Apache开启伪静态示例环境:系统 WindowsApache 2.2加载Rewrite模块:在conf目录下httpd.conf中找到LoadModule rewrite_module modules/mod_rewrite.so这句,去掉前边的注释符号“#”,或添加这句。允许在任何目录中使用“.htaccess”…

从入门到深入Fiddler 2 (二)

AutoResponder 快速引用 今天我们来看一下Fiddler的AutoResponder选项卡的强大功能。 Fiddler的AutoResponder 选项卡允许你使用本地硬盘的文件来作为返回内容,而不是把请求发往服务器。 创建AutoResponder 规则。 使用AutoResponder选项卡,你可以创建一…

探索性数据分析EDA及数据分析图表的选择

文章目录一、探索性数据分析EDA二、数据分析图表的选择一、探索性数据分析EDA 探索性数据分析(Exploratory Data Analysis,简称EDA),指对数据分析的过程中尽量不加入先验假设,而是通过作图表和统计等方式来探索数据结构和规律。 在EDA中你可…

LeetCode MySQL 608. 树节点

文章目录1. 题目2. 解题1. 题目 给定一个表 tree,id 是树节点的编号, p_id 是它父节点的 id 。 ---------- | id | p_id | ---------- | 1 | null | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 2 | ---------- 树中每个节点属于以下三种类…

xshell 打开文件跳转到最后_如何在Xshell中打开Xftp

Xftp作为远程文件传输软件,与Xshell终端模拟器同属于Xmanager,这两款软件经常配合使用,用来给远程服务器上传文件非常方便。那么在使用Xshell的时候怎样打开Xftp呢?下面就来给大家介绍具体操作技巧。如果安装了一、XShell中打开如…

网络资源-深入剖析Binding2(学习)

WPF Binding WPF里分三种Binding:Binding, PriorityBinding, MultiBinding,这三种Binding的基类都是BindingBase,而BindingBase又继承于MarkupExtension Binding: 提供对绑定定义的高级别访问,绑定将绑定目标对象&…

LeetCode MySQL 1045. 买下所有产品的客户

文章目录1. 题目2. 解题1. 题目 Customer 表: ---------------------- | Column Name | Type | ---------------------- | customer_id | int | | product_key | int | ---------------------- product_key 是 Product 表的外键。Product 表&#xff1…