今天碰见个题目,感觉短路表达式很好用。

题目:

定义一个计算圆面积的函数area_of_circle(),它有两个参数:

  r: 表示圆的半径;
  pi: 表示π的值,如果不传,则默认3.14   function area_of_circle(r, pi) {    }

我的写法: 

if(arguments.length>=2)
{
return pi*r*r;
}
else if(arguments.length==1)
{
return 3.14*r*r;
}
else return false;

别人写法:

return r*r*( arguments.length >= 2 ? pi : 3.14 );

大神写法:

return r * r * (pi || 3.14);

短路表达式知识补充:

1、逻辑与 && 的运算方式

var a = 1 && 2;

console.log(a); //返回的结果为 2

如果逻辑与运算符左边的值布尔转换后为true,那么返回右边的值(不管右边的值是真还是假)。

var a = false && 2;

console.log(a); //返回的结果为 false

如果逻辑与运算符左边的值布尔转换后为false,那么返回左边的值,但是当逻辑与的左边为 null/NaN/undefined ,结果就会得到null/NaN/undefined。

2、逻辑或 || 的运算方式

如果逻辑或运算符左边的值布尔转换后为false,那么返回右边的值(不管右边的值是真还是假)。

如果逻辑或运算符左边的值布尔转换后为true,那么返回左边的值,如果两个操作数都是是null(NaN/undefined),返回null(NaN/undefined)

var a = false || 2;

console.log(a); //返回的结果为2

var a = true || 2;

console.log(a); //返回的结果为 true

3.短路表达式实际应用补充(2018-8-14)

(1)正则表达式
v => !v || /^([0-9]{7,18})|(0?(13|14|15|17|18|19)[0-9]{9})$/.test(v) || '格式错误',
前边为true则不再执行后边的,前边为false则继续往后执行。
 
(2)if的简化
vm.querySelObj[key] && (params[key] = vm.querySelObj[key]);

相当于 a&&(b=1);
 a等于true则执行b=1,a=false则不执行b=1.用if写:if(a=true){b=1}
 
 

js短路表达式的更多相关文章

  1. Javascript优化细节:短路表达式

    什么是短路表达式? 短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程 ...

  2. js switch表达式的例子

    switch 这种表达式在很多语言中都有,比如java, C等待, 使用switch比使用if else 来得方便,来得清晰.  前言 switch 这种表达式在很多语言中都有,比如java, C等待 ...

  3. Javascript短路表达式

    短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短 ...

  4. js函数表达式和函数声明的区别

    我们已经知道,在任意代码片段外部添加包装函数,可以将内部的变量和函数定义"隐 藏"起来,外部作用域无法访问包装函数内部的任何内容. 例如: var a = 2; function ...

  5. js逗号表达式

    在js中的某些场景,","是一种运算符号,只不过他的优先级要低于普通的原酸符,在变量声明或者return中,经常看到逗号表达式. 声明变量: var a=1,b=2,c=3; co ...

  6. js中表达式 >>> 0 浅析 (以及用php简单翻译)

    今天在看lodash的源码中slice这个函数实现的时候发现了里面有这么一行代码 length = start > end ? 0 : ((end - start) >>> 0 ...

  7. js 三元表达式

    JavaScript三元运算符的多种使用技巧 发现代码慢慢写多了的时候会不自觉的将if else 用 三元来替代,仅仅是未了让代码更简洁精辟,当然也有人说用三元可以让你有高潮的感觉.最近在写js 的时 ...

  8. JS:表达式

    js代码的形式: 1.直接量 2.表达式 3.语句 1; "a"; true; null; var a; function fn(){}; b; var c = 20; var f ...

  9. jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)

    上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...

随机推荐

  1. 科普:String hashCode 方法为什么选择数字31作为乘子

    1. 背景 某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主 ...

  2. 一个php技术栈后端猿的知识储备大纲

    <h1 align="center">Easy Tips</h1><p align="center"><a href= ...

  3. IOS学习笔记25—HTTP操作之ASIHTTPRequest(一)

    ASIHTTPRequest是一个第三方开源项目,在现在的IOS应用中多使用到这个开源类库来提供网络操作,相比于SDK提供的网络操作类库,ASIHTTPRequest使用上更加方便.效率更高,同时功能 ...

  4. IOS开发之UIView总结1

    太长了,请看 http://blog.csdn.net/xdrt81y/article/details/9128695 performSelector: performSelector:withObj ...

  5. struts配置json需要的jar包

  6. Oracle database

    //下面这个通常直选择TCP就好了 此处的全局数据库根据实际情况来确定,如果是第一次,要和第一次一致.(见上面的图中的全局数据库) //这个可以使  计算机名(计算机—>属性).也可以是ip地址 ...

  7. MVVM探索:从ViewModel关闭Window的最佳实践

    在WPF里使用MVVM开发的时候,似乎总是不可避免的会遇到这样一个问题:ViewModel在处理完业务之后需要关闭这个Window,这时候要怎么处理? 网上有很多解决方案:有的在ViewModel抛出 ...

  8. 小白成长系列--HTTP协议(一)

    序:小白成长系列是笔者使用最简单易懂的逻辑来解释常见的计算机相关知识,不仅理解,还让你记忆深刻\(^o^)/ 先理解什么是协议? 协议就是双方要做某件事情而制定的规则,而且双方必须要遵从协议所约定的内 ...

  9. awk的+=用法

    awk增加统计列值为增加列数或进行运行结果统计,使用符号 + =.增加的结果赋给符号左边变量值,增加到变量的域在符号右边.例如将 $ 1加入变量total,表达式为toatl+=$1.列值增加很有用. ...

  10. Spring AOP小记

    一.概述 在通常的开发过程中,我们调用的顺序通常是controller->service-dao,其中,service中包含着太多的业务逻辑,并且还要不断调用dao来实现自身的业务逻辑,经常会导 ...