今天来介绍一下javascript不一样的写法,很简单哦。

1、当条件成立时执行a方法,当条件失败是执行b方法

通常我们会这样写:

var result;
if(isOk){
result=funA();
}else{
result=funB();
}

还可以这样表达:

 var result=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",逻辑上被判定为 true
1||"OK" //表达式的值为数字1,逻辑上被判定为 true
null||[] //表达式的值为数组[],逻辑上被判定为 true
null&&[] //表达式的值为null,逻辑上被判定为 false

3、当进行多个条件判段时

给一个例子:每种颜色对应一个值,比如"white","red","green","yellow","gray","blue" 分别

对应的值为0,1,2,3,4,5

1) 问题一:根据值获取颜色

实现方式一

function getColorByVal(val) {
var color = "";
if (val = 0){
color = "white";
}else if (val = 1) {
color = "red";
} else if (val = 2) {
color = "green";
} else if (val = 3) {
color = "yellow";
} else if (val = 4) {
color = "gray";
} else if (val = 5) {
color = "blue";
}
return color;
}

实现方式二

function getColorByVal(val) {
var color;
switch (val) {
case 0:
color = "white";
case 1:
color = "red";
break;
case 2:
color = "green";
break;
case 3:
color = "yellow";
break;
case 4:
color = "gray";
break;
case 5:
color = "blue";
break; }
return color;
}

实现方式三

function getColorByVal(val) {
return ["white","red","green","yellow","gray","blue"][val];
}

调用: var color=getColorByVal(2);

方式一和方式二相比没什么差别,但方式二稍微好一点,而方式三则是让人眼前一亮,短小精悍

就完成了功能。不过有的人会说颜色的值刚好是数组下标,所以我们再来一题:

2) 问题二:根据颜色获取值

你可以用if 或switch 语句来完成,不过这里给出另外两种方式:

方式一:

function getValByColor(color){
var colors=["white","red","green","yellow","gray","blue"];
var result;
for(var i=colors.length-1;i--;){
if(colors[i]==color){
result=i;
break;
}
}
return result;
}

方式二:

function getValByColor(color){
return {"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5}[color];
}

调用: var val=getValByColor("red");

对比一下很明显,方式二更简单而且易懂,巧妙在于构造一个对象,通过属性获取值,从而避开

了繁琐的判断。

 4、交换两个变量的值

通常是这样实现的:

var temp=0,a=5,b=10;
temp=a;
a=b;
b=temp;

不过还可以更巧一些:

var a=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、获取对象的属性
方式一
var arr=[],i=0;
var colors={"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5};
for(var key in colors){
arr[i++]=key;
}

方式二

var arr=[],i=0;
var colors={"white":0,"red":1,"green":2,"yellow":3,"gray":4,"blue":5};
for(arr[i++] in colors);

两种方式都得到了对象colors的属性(arr=["white", "red", "green", "yellow", "gray", "blue"]), 第二种方式不过搭了 for in 语句的顺风车。方式一中for in语句依次从colors获取一个属性赋值给key,只不过在方式二中赋值给了arr[i++]。这个纯粹是为了好玩,享受编程的乐趣也是编程的一部分吧。

javascript另类写法的更多相关文章

  1. JavaScript技巧&写法

    原文:JavaScript技巧&写法 JavaScript技巧篇: 1>状态机 var state = function () { this.count = 0; this.fun = ...

  2. javascript json写法

    javascript json写法 var shuxing = {name:"super",sex:"19",work:"IT"}; 这个k ...

  3. .net EasyTree显示所级层级(无限级、整层级颗树)的另类写法。非递归

    获取整颗树的另类写法.非递归 //获取所有的菜单 List<T_Menu> menu = bll.getMenuByUsesrID("8189a7c1-6f15-4744-b6c ...

  4. [js高手之路] javascript面向对象写法与应用

    一.什么是对象? 对象是n个属性和方法组成的集合,如js内置的document, Date, Regexp, Math等等 document就是有很多的属性和方法, 如:getElementById, ...

  5. addEventListener 的另类写法

    addEventListener 参数如下 addEventListener(type, listener[, useCapture]); type,事件名称 listener,事件处理器 useCa ...

  6. sql查询条件为空的另类写法o( ̄▽ ̄)d

    简单描述:今天看老大提交的代码,发现了一个有意思的事情,一条sql中判断条件是空,老大的写法,让我眼前一亮.直接上代码 代码: <select id="getxxxs" re ...

  7. 巧用style的另类写法

    看到style,不少人可能会说这个我知道,就是控件写属性的话可以通过style来实现代码的复用,单独把这些属性及其参数写成style就可以便捷的调用. <?xml version="1 ...

  8. php登陆界面刷新验证码 javascript 的写法

    <script type="text/javascript"> function refreshVerify(){ var imgId = document.getEl ...

  9. JavaScript函数写法整理

    1.普通函数定义的两种写法 function hello(){ console.log("hello!"); } var hello = function(){ console.l ...

随机推荐

  1. Spring和ActiveMQ集成实现队列消息以及PUB/SUB模型

    前言:本文是基于Spring和ActiveMQ的一个示例文章,包括了Point-To-Point的异步队列消息和PUB/SUB(发布/订阅)模型,只是做了比较简单的实现,无任何业务方面的东西,作为一个 ...

  2. 插件 原生js 省市区 三级联动 源码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Sax解析xml及pull解析xml

    sax解析参考:http://www.iteye.com/topic/763895: 说明:测试时报空指针异常,未能读取到数据,关注Sax解析的过程及API即可: pull解析参考:http://ww ...

  4. mysq 中 information_schema 库

    information_schema这个库,这个在mysql安装时就有了,提供了访问数据库元数据的方式.那什么是元数据库呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时 ...

  5. MongoDB中$redact操作符的使用

    介绍 redact <- redaction 修订/校验,意思是对文档内容进行过滤,选择一些过滤或保留的信息 . access level 存取等级 有三种: - $$DESCEND 返回当前等 ...

  6. 解决provisional headers are shown问题

    前端通过ajax的get请求向后端发送数据,后端死活收不到. ajax代码如下: $.ajax({ url:"/news_list", type:"GET", ...

  7. 【linux高级程序设计】(第九章)进程间通信-管道 3

    有名管道 无名管道和有名管道: 1. 管道是特殊类型的文件,在满足先入先出的原则写可以读写,不能定位读写位置. 2.管道是单向的. 3.无名管道阻塞于读写位置,而有名管道阻塞在创建位置. 4.无名管道 ...

  8. 部署站点支持Https访问的方法

    1.申请公钥和私钥,放到服务器 2.编辑default配置文件 改为 加上证书路径 ps:泛域名支持admin.xxx.com.demo.xxx.com等等,而免费的Let's Encrypt仅支持w ...

  9. Codeforces Gym 101775D Mr. Panda and Geometric Sequence(2017-2018 ACM-ICPC Asia East Continent League Final,D题,枚举剪枝)

    题目链接  ECL-Final 2017 Problem D 题意  给定$2*10^{5}$组询问,每个询问求$l$到$r$之间有多少个符合条件的数 如果一个数小于等于$10^{15}$, 并且能被 ...

  10. URl 传参时+号变成空格

    前端用base64加密后的数据,传递到后台时发现一个问题: 比如 韩飞 这个名字,base64加密后的字符串为 6Z+p6aOe 但是后端接受到参数为: 6Z p6aOe +号变成了空格,导致后台解密 ...