摘要:最近在编写一个前端模块功能,编写了大量的代码,其中一般图片特效展示是参考别人的代码来写的,发现有些代码似乎看得明白又好像不确定是不是哪个意思,所以在网上问了一下程序员们,原来是JS代码简写。

转自:http://www.lezhu99.com/2382.html

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

  1. var result;
  2. if(isOk){
  3. result=funA();
  4. }else{
  5. result=funB();
  6. }

您还可以这样表达:

  1. var result = isOk ? funA() : funB()

2、当条件成立执某个方法

通常定法:

  1. if (isOk) {
  2. doSomething();
  3. }

我更喜欢这样写:

  1. isOk && doSomething();

如果一个变量没定义或没有值则给它一默认值:

  1. str=str||"ok";
  2. arr=arr||[];

上面的方式可行,是因为在js逻辑运算中,返回值不一定是true或false,也可以是其他任何值,而且 0、""、null、false、undefined、NaN都会判为false,其他都为true。举例:

  1. 1&&"OK" //表达式的值为字符串"OK",逻辑上被判定为 true
  2. 1||"OK" //表达式的值为数字1,逻辑上被判定为 true
  3. null||[] //表达式的值为数组[],逻辑上被判定为 true
  4. null&&[] //表达式的值为null,逻辑上被判定为 false

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

给一个例子:每种颜色对应一个值,比如"white","red","green","yellow","gray","blue" 分别对应的值为0,1,2,3,4,5

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

实现方式一

  1. function getColorByVal(val) {
  2. var color = "";
  3. if (val = 0){
  4. color = "white";
  5. }else if (val = 1) {
  6. color = "red";
  7. } else if (val = 2) {
  8. color = "green";
  9. } else if (val = 3) {
  10. color = "yellow";
  11. } else if (val = 4) {
  12. color = "gray";
  13. } else if (val = 5) {
  14. color = "blue";
  15. }
  16. return color;
  17. }

实现方式二

  1. function getColorByVal(val) {
  2. var color;
  3. switch (val) {
  4. case 0:
  5. color = "white";
  6. case 1:
  7. color = "red";
  8. break;
  9. case 2:
  10. color = "green";
  11. break;
  12. case 3:
  13. color = "yellow";
  14. break;
  15. case 4:
  16. color = "gray";
  17. break;
  18. case 5:
  19. color = "blue";
  20. break;
  21. }
  22. return color;
  23. }

实现方式三

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

调用: var color=getColorByVal(2);

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

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

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

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

方式一:

  1. function getValByColor(color){
  2. var colors=["white","red","green","yellow","gray","blue"];
  3. var result;
  4. for(var i=colors.length-1;i--;){
  5. if(colors[i]==color){
  6. result=i;
  7. break;
  8. }
  9. }
  10. return result;
  11. }

方式二:

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

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

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

4、交换两个变量的值

通常是这样实现的:

  1. var temp=0,a=5,b=10;
  2. temp=a;
  3. a=b;
  4. b=temp;

不过还可以更巧一些:

  1. var a=5,b=10;
  2. a=[b,b=a][0];

a=[b,b=a][0] 执行过程:先执行数组里两个表达式b和b=a,作用是把5赋值给b并产生一个数组[10,5] ,然后 a=[10,5][0]即 a=10,这样就完成了交换,不过也借助了无名的数组,但看起来好想没借助第三个变量,不过不提倡这样做,毕竟第一种方式更易懂。

5、获取对象的属性

方式一

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

方式二

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

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

JavaScript精简代码 非一般的写法(转载)的更多相关文章

  1. asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  2. MVC过滤器使用案例:统一处理异常顺道精简代码

    重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...

  3. JavaScript复杂判断的更优雅写法

    摘要: 写代码是一门艺术. 原文:JavaScript 复杂判断的更优雅写法 作者:Think. 公众号:大转转fe Fundebug经授权转载,版权归原作者所有. 前提 我们编写js代码时经常遇到复 ...

  4. Javascript特效代码大全(420个)(转)

    转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习  ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...

  5. HTML5 声明兼容IE的写法(转载)

    HTML5 声明兼容IE的写法(转载)   1 2 3 4 5 6 7 8 9 10 <!DOCTYPE html> <!--[if IE]> <meta http-eq ...

  6. javascript常用代码大全

    http://caibaojian.com/288.html    原文链接 jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ...

  7. JSLint是一个JavaScript的代码质量工具

    JSLint是一个JavaScript的代码质量工具 可能都或多或少的知道JSLint是一个JavaScript的代码质量工具,一个JavaScript语法检查器和校验器,它能分析JavaScript ...

  8. 32、可以拿来用的JavaScript实用功能代码

    可以拿来用的JavaScript实用功能代码(可能会有些bug,用时稍微修改下,我用了几个还可以) 转载自 1.原生JavaScript实现字符串长度截取 function cutstr(str, l ...

  9. JavaScript standard 代码规范的全文

    这是 JavaScript standard 代码规范的全文. 掌握本规范的最好方法是安装并在自己的代码中使用它. 细则 使用两个空格进行缩进. eslint: indent function hel ...

随机推荐

  1. 3. mybatis # 与 $ 的区别

    mybatis # 与 $ 的区别 1.# % 号必须写在test中 应用场景:模糊查询 配置文档mapper.xml <select id="selectBlogByTitle&qu ...

  2. Qt 学习之路 2(26):反走样

    Qt 学习之路 2(26):反走样 豆子 2012年11月12日 Qt 学习之路 2 9条评论 我们在光栅图形显示器上绘制非水平.非垂直的直线或多边形边界时,或多或少会呈现锯齿状外观.这是因为直线和多 ...

  3. 安装OFFICE2016错误代码0-1018(0)的解决方案 和激活方案

    一.安装OFFICE2016错误代码0-1018(0)的解决方案 下面方法亲测有效:Step 1. Go to C:\Program Files\Common Files\microsoft shar ...

  4. 学习C/C++需要掌握哪些知识

    初级阶段 1.C语言 数据类型.变量.内存布局.指针基础: 字符串.一维数组.二维数组: 一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针: 结构体.文件的使用: 动态库的封装和设计: ...

  5. Kibana6.x.x——启动后的一些警告信息记录以及解决方法

    1.发现的第一个警告信息 server log [06:55:25.594] [warning][reporting] Generating a random key for xpack.report ...

  6. HDU-Digital Roots(思维+大数字符串模拟)

    The digital root of a positive integer is found by summing the digits of the integer. If the resulti ...

  7. day18 约束 异常

    1. 类的约束 方案一:抛出异常,子类必须重写父类方法,否则会报错 class Base: def login(self): #强制xxx做XXX事 raise NotImplementedError ...

  8. ubuntu php 连接sql server

    1.下载最新的freetds ,访问 http://www.freetds.org/, 或者在 ubuntu上用 wget ftp://ftp.freetds.org/pub/freetds/stab ...

  9. 6.过滤器(Filter)

    ---恢复内容开始--- 1.过滤器简介: 过滤器是一个用于拦截在数据源和数据目的地之间消息的一个对象. 过滤器 功能: 分析请求,将请求发送给指定的资源或自己创建一个响应返回:在请求到达服务器端前处 ...

  10. mybatis-Plus 增强版用法收藏

    转载:http://www.cnblogs.com/okong/p/mybatis-plus-guide-one.html#xml%E5%BD%A2%E5%BC%8F https://blog.csd ...