js 实用技巧 短路求值
&&运算符 如果操作有false 则返回false 例如
0&&1 // 返回0
true&&false //返回false
0&&null //返回0
如果所有操作数的值都是 true,将返回最后一个表达式的值。例如
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
| | 运算符 操作有true 就返回true 例如
true | | false //返回true
false | | true //返回true 证明不是返回第一个表达式的值哦
如果所有操作数的值都是 false,将返回最后一个表达式的值。例如
0||false //返回 false
false||0 //返回 0
看到这里 可能觉得太简单了吧 谁不会。。。 不过可能工作中确实不知道怎么用吧 下面说几个示例
1.假设我们想要返回一个变量的 length,但又不知道变量的类型 应该怎么搞呢?
我们可以使用 if/else 来检查 foo 是否是一个可接受的类型,但这样会让代码变得很长。这个时候可以使用短路求值:
return (foo | | [ ] ).length
上述代码 如果有length 就返回长度 否则 就返回0
let arr;
(arr | | [ ]).length
//返回 0
arr = [1,2,3,4]
(4) [1, 2, 3, 4]
( arr | | [ ] ).length
//返回4
2.你是否曾经在访问嵌套对象属性时遇到过问题?你可能不知道对象或某个子属性是否存在,所以经常会碰到让你头疼的错误。
假设我们想要访问 this.state 中的一个叫作 data 的属性,但 data 却是 undefined 的。在某些情况下调用 this.state.data 会导致 App 无法运行。为了解决这个问题,我们可以使用条件语句:
if (this.state.data){
return this.state.data;
}else {
return 'Fetching Data';
}
如果使用短路求值 是不是更加简洁一点呢
return ( this.state.data | | 'Fetching Data' )
js 实用技巧 短路求值的更多相关文章
- 一个短路求值引起的一个小bug
今天在写一个判断字符串是否回文时因为短路求值问题导致了一个bug,记录如下: 代码如下 bool isPal(char str[],int len) { int begin=0; int end=le ...
- 一道PHP题引出的“短路求值”
今天群里有个人问了一个问题,代码如下: $a = 3; $b = 2; if ($a = 2 || $b = 5) { ++$a; } echo $a; 说代码段的执行的结果为1,问大家$a的 ...
- C 语言 - 逻辑运算和短路求值
逻辑运算符: 运算符 含义 优先级 ! 逻辑非 高 && 逻辑与 中 || 逻辑或 低 举例: !a:如果 a 为真,!a 为假:如果 a 为 假,!a 为真 a && ...
- Julia - 短路求值
&& 和 || 的布尔运算符被称为短路求值 它们连接一系列布尔表达式,仅计算最少的表达式来确定整个链的布尔值 在表达式 a && b 中,只有 a 为 true 时才计 ...
- php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干)
php实现用短路求值原理求1+2+3+...+n(短路求值是什么)(仔细分析题干) 一.总结 1.仔细分析题干,找出要点:该递归还是得递归啊 2.短路求值原理:&&就是逻辑与,逻辑与有 ...
- js实用技巧
IIFE(立即调用函数表达式)最广泛的用途是避免污染全局作用域. 已经有很多JavaScript库和JavaScript高手正在使用这种技巧, 尤其是在最流行jQuery插件的开发者中. 你也应该把这 ...
- “短路求值(Short-Circuit Evaluation)
// 逻辑与和逻辑或操作符总是先计算其做操作数,只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解其右操作数. function aa() { if (null) { console ...
- JavaScript学习总结(8)——JS实用技巧总结
后退 前进 <!--<input type="button" value="后退" onClick="history.go(-1)&quo ...
- C语言对表达式的求值顺序不是明确规定的
讨论区看到的 WA来自那些递归下降求解的代码. 第一种情况,使用|| 和 &&: 例如s为所给串 int getval() { switch(s[c_s++]) { case 'p': ...
随机推荐
- PHPCMS快速建站系列之后台内容自定义修改
一.后台登录页面 背景图:\statics\images\admin_img 中的 login_bg.jpg 底部版权信息:\phpcms\languages\en 中的 system.lang.ph ...
- Ubuntu 18.04中的Vim编辑器的高级配置
VIM (Unix及类Unix系统文本编辑器) Vim是一个类似于Vi的著名的功能强大.高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性.VIM是开源软件. Vim普遍被推崇为类Vi编辑器中 ...
- WinMail邮件服务器(客户端)环境搭建与配置
WinMail邮件服务器(客户端)环境搭建与配置 一.在搭建WinMail邮件服务器(客户端)之前必备 (1).在虚拟机上安装两个干净无毒的操作系统 ...
- IDEA入门(1)--lombok和Junit generator2插件的运用
前言 最近在慕课网看到了一些视频,准备从0开始做一个电商网站.视频中的大牛用的java的IDE都是IDEA,让我很纠结.从as到MyEclipse,好不容易稍微熟悉了一下MyEclipse的基本操作, ...
- 详解 CALayer 和 UIView 的区别和联系
http://www.cocoachina.com/ios/20150828/13244.html 作者:@武蕴牛x 授权本站转载. 前言 前面发了一篇iOS 面试的文章,在说到 UIView 和 C ...
- 【C++】STL :栈
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: sta ...
- 在JS中模拟表单的post提交,进行页面的跳转
原文链接:https://blog.csdn.net/jal517486222/article/details/83147761 /* *功能: 模拟form表单的提交 *参数: URL 跳转地址 P ...
- Python里的迭代器
迭代器(iterator)协议 · 在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法. 1.__iter__()方法:返回迭代器对象本身: 2.__next ...
- Django之内置组件
Django组件介绍 分页器的使用 Form modelForm orm cookie和session 中间件 信号 ...
- @游记@ THUWC2019
目录 @day -???@ @day -30~-1@ @day 0@ @day 1@ @day 2@ @day 3@ @day -???@ 我这个蒟蒻居然收到了 THUWC 的邀请? 那就去试试运气吧 ...