(转)Javascript 的|| 和&& 运算符的精简用法

原帖地址:  http://www.w3cfuns.com/blog-5477338-5410055.html

在js逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true.

|| 先计算第一个运算数,如果可以被转换成true,则返回左边这个表达式的值,否则计算第二个运算数。即使||运算符的运算数不是布尔值,任然可以将它看作布尔OR运算,因为无论它返回的值是什么类型,都可以被转换为布尔值。

&& 它先计算第一个表达式,若为假,就不会去处理第二个表达;否则继续处理后继表达式。从左到右选取表达式的第一个为非true的表达式的值,如果一直未找到则返回最后一个表达式的值。

if( a == 3 ){
    alert("OK");
}
简写成:
a==3 && alert("OK");

if( a == 3 ){
   alert("Yes");
}
else{
   alert("No");
}
简写成:
a==3 && alert("Yes") || alert("No");

这种写法在js框架中使用已经非常普遍,使用这种表达式对于不熟悉 JavaScript 的人,确实会降低可读性,但是熟悉之后,反而会让原本层层叠叠的条件判断逻辑更加清晰。

看栗子: 提取一个数组的数据,允许提取的数组元素下标为 1、3、6、7、8

  1. var test = (function(arr){
  2. return function(i){
  3. if( arr[i] != undefined ){
  4. if(i==1){
  5. return arr[i];
  6. }
  7. else if(i==3){
  8. return arr[i];
  9. }
  10. else if(i==6){
  11. return arr[i];
  12. }
  13. else if(i==7){
  14. return arr[i];
  15. }
  16. else if(i==8){
  17. return arr[i];
  18. }
  19. else{
  20. return "没有权限";
  21. }
  22. }else{
  23. return "错误的参数";
  24. }
  25. }
  26. })([1,2,3,4,5,6,7,8,9,10]);

复制代码

精简代码:

  1. var test = (function(arr){
  2. return function(i){
  3. return arr[i] != undefined &&
  4. ( i==1&&arr[i] || i==3&&arr[i] || i==6&&arr[i] || i==7&&arr[i] || i==8&&arr[i] || "没有权限" ) ||
  5. "错误的参数";
  6. }
  7. })([1,2,3,4,5,6,7,8,9,10]);

复制代码

再简单点:

  1. var test = (function(arr){
  2. return function(i){
  3. return i in arr &&
  4. ( (i==1||i==3||i==6||i==7||i==8) && arr[i] || "没有权限" ) ||
  5. "错误的参数";
  6. }
  7. })([1,2,3,4,5,6,7,8,9,10]);

复制代码

强大的表达式,再看另一种栗子

  1. var a = 0;
  2. var b;
  3. function test(i){
  4. if(i==3){
  5. b=10;
  6. }
  7. else if(i==4){
  8. b=23;
  9. }
  10. else if(i==6){
  11. b=44;
  12. }
  13. else{
  14. b=null;
  15. }
  16. }

复制代码

  1. var a = 0;
  2. var b;
  3. function test(i){
  4. b = {"3":10, "4":23, "6":44}[i] || null;
  5. }

复制代码

时间: 2024-08-02 07:30:50

(转)Javascript 的|| 和&& 运算符的精简用法的相关文章

JavaScript逻辑and运算符详解

一.AND详解: 在JavaScript中,逻辑 AND 运算符用双和号(&&)表示. 需要说明的是:逻辑AND运算的运算数可以是任何类型的,不止是Boolean值,如果某个运算数不是原始的Boolean型值,逻辑AND运算并不一定返回Boolean值. 逻辑AND运算符的运算行为如下: 如果一个运算数是对象,另一个是 Boolean 值,返回该对象. 如果两个运算数都是对象,返回第二个对象. 如果某个运算数是 null,返回 null. 如果某个运算数是 NaN,返回 NaN. 如果某个

JavaScript中“typeof”运算符与“instanceof”运算符的差异

在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了.“typeof”是一元运算符,其后直接跟需要进行类型判断的数据:而“instanceof”是二元运算符,其左侧是需要判断的数据,右侧是用于比较的类型. //typeof是一元运算符: var amount = 108; console.log(typeof amout);//控制台输出“numbe

关于JavaScript中apply与call的用法意义及区别(转)

JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别.先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,   [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象.arg1, arg2,  , argN可选项.将被传递方法参数序列.说明call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下

JavaScript中字符串分割函数split用法实例

这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaScript中字符串分割函数split用法.分享给大家供大家参考.具体如下: 先来看下面这段代码: <script type="text/javascript"> var str="How are you doing today?" document.write

javascript的void运算符

javascript的void运算符:void运算符对任何值都会返回undefined.此运算符一般用来避免输出不应该出现的值.实例代码: var a; a=2; document.write(void(a)); 输出结果:undefined . <a href="javascript:void(window.open('about:blank'))">点击打开新窗口</a> 以上代码在网页中经常用到.window.open()方法会返回新窗口对象的引用,并且该

C#位运算符的基本用法

位运算符包括:| 按位或 OR,& 按位与 AND,^ 按位异或 XOR,~ 取反 NOT,<< 左移 Left Shift,>> 右移 Right Shift,等等.本篇体验位运算符在C#中的应用.主要包括: ○ 进制转换    ※ 十进制转换成二进制    ※ 二进制转换成十进制○ | 按位或操作符○ & 按位与操作符○ ^ 按位异或操作符    ※ 使用^按位异或交换2个数    ※ 使用^按位异或进行加密运算○ ~ 取反操作符○ x << n 左

每天一个JavaScript实例-apply和call的用法

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-apply和call的用法</title> <script> function Person(name,age){ //定义一个类,人类

JavaScript中的运算符

JavaScript中的运算符,JavaScript是具有全范围的运算符,包括算术.逻辑.位.赋值以及其他某些运算符. 计算逻辑位运算赋值杂项 描述符号描述符号描述符号描述符号描述符号 负值-逻辑非!按位取反~赋值=删除deletewww.mlybyby.com 递增++小于<按位左移<<运算赋值oP=typeof 运算符typeof 递减--大于>按位右移>>voidvoid 乘法*小于等于<=无符号右移>>>instanceofinstanc

JavaScript中SetInterval与setTimeout的用法详解

在写H5游戏时经常需要使用定时刷新页面实现动画效果,比较常用即setTimeout()以及setInterval(),但是大家对SetInterval与setTimeout的用法了解吗,下面通过本文给大家详解js中SetInterval与setTimeout的用法,需要的朋友参考下 setTimeout 描述 setTimeout(code,millisec) setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式. 注:调用过程中,可以使用clearTimeout(id_of_