1、当条件成立时执行a方法,当条件失败是执行b方法
通常我们会这样写:
varresult;if(isOk){result=funA();}else{result=funB();}
还可以这样表达:
varresult=isOk?funA():funB()
2、当条件成立执某个方法
通常方式:
if(isOk){doSomething();}
我更喜欢这样写:
isOk&&doSomething();
如果一个变量没定义或没有值则给它一默认值
str=str||"ok";arr=arr||[];
上面的方式可行,是因为在js逻辑运算中,返回值不一定是true或false,也可以是其他任何值,而且0、""、null、false、undefined、NaN都会判为false,其他都为true。举例:
1&&"OK"//表达式的值为字符串"OK",逻辑上被判定为true1||"OK"//表达式的值为数字1,逻辑上被判定为truenull||[]//表达式的值为数组[],逻辑上被判定为truenull&&[]//表达式的值为null,逻辑上被判定为false
3、当进行多个条件判段时
给一个例子:每种颜色对应一个值,比如"white","red","green","yellow","gray","blue"分别对应的值为0,1,2,3,4,5
1)问题一:根据值获取颜色
实现方式一
functiongetColorByVal(val){varcolor="";if(val=0){color="white";}elseif(val=1){color="red";}elseif(val=2){color="green";}elseif(val=3){color="yellow";}elseif(val=4){color="gray";}elseif(val=5){color="blue";}returncolor;}
实现方式二
functiongetColorByVal(val){varcolor;switch(val){case0:color="white";case1:color="red";break;case2:color="green";break;case3:color="yellow";break;case4:color="gray";break;case5:color="blue";break;}returncolor;}
实现方式三
functiongetColorByVal(val){return["white","red","green","yellow","gray","blue"][val];}
调用:varcolor=getColorByVal(2);
方式一和方式二相比没什么差别,但方式二稍微好一点,而方式三则是让人眼前一亮,短小精悍就完成了功能。不过有的人会说颜色的值刚好是数组下标,所以我们再来一题:
2)问题二:根据颜色获取值
你可以用if或switch语句来完成,不过这里给出另外两种方式:
方式一:
functiongetValByColor(color){varcolors=["white","red","green","yellow","gray","blue"];varresult;for(vari=colors.length-1;i--;){if(colors[i]==color){result=i;break;}}returnresult;}
方式二:
functiongetValByColor(color){return{"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5}[color];}
调用:varval=getValByColor("red");
对比一下很明显,方式二更简单而且易懂,巧妙在于构造一个对象,通过属性获取值,从而避开了繁琐的判断。
4、交换两个变量的值
通常是这样实现的:
vartemp=0,a=5,b=10;temp=a;a=b;b=temp;
不过还可以更巧一些:
vara=5,b=10;a=[b,b=a][0];a=[b,b=a][0]执行过程:先执行数组里两个表达式b和b=a,作用是把5赋值给b并产生一个数组[10,5],然后a=[10,5][0]即a=10,这样就完成了交换,不过也借助了无名的数组,但看起来好想没借助第三个变量,不过不提倡这样做,毕竟第一种方式更易懂。5、获取对象的属性方式一vararr=[],i=0;varcolors={"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5};for(varkeyincolors){arr[i++]=key;}
方式二
vararr=[],i=0;varcolors={"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5};for(arr[i++]incolors);
两种方式都得到了对象colors的属性(arr=["white","red","green","yellow","gray","blue"]),第二种方式不过搭了forin语句的顺风车。方式一中forin语句依次从colors获取一个属性赋值给key,只不过在方式二中赋值给了arr[i++]。这个纯粹是为了好玩,享受编程的乐趣也是编程的一部分吧。。
是不是发现javascript也很有意思呢?有意思就推荐一下吧<wbr></wbr>