(转)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. }
复制代码


posted @ 2015-10-29 15:51  haili042  阅读(193)  评论(0编辑  收藏  举报