博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 之银弹の技法
阅读量:6595 次
发布时间:2019-06-24

本文共 3183 字,大约阅读时间需要 10 分钟。

JavaScript 之银弹の技法

下文这些淫巧在之前自认为是居家必备,装逼撩妹的必备之物,博主一直敝帚自珍,不愿拿出来分享,现如今,ES6+极尽能事,我知道再不拿出来就在没有价值了?

来由

博主入行前端写JavaScript时候,因为需要兼容IE低版本,时常需要在繁杂冗长的DOM操作夹杂的代码中,尽可能巧妙地节省代码了,保持代码清洁和逼格,久而久之,在维护前辈旧代码和新功能开发时积累了一套代码书写的奇技淫巧,你也可以把它看作是抖机灵,不过它的确是丰盈了我的codeの时光,让我们不至书写业务那么枯燥。

目录

  • 1. 取整

  • 2. 多行字符串

  • 3. 快速输出重复字符串

  • 4. 用switch case代替if else

  • 5. 截取数组

  • 6. 获取数组中的最大值和最小值

  • 7. 日期转数字

  • 8. 用 && || ?: , 节省代码行数

  • 9. 隐式转换

  • 10. 利用对象数组取值、方法

  • 11. 匿名函数的N种写法


1. 取整 (任性指数: ⭐️⭐️⭐️⭐️⭐️)

var a = ~~1.2; //1

还可以用位右移符>>

var a = 3.4>>0; //3

简单解释,~是按位取反的运算符,可以将浮点数通过舍去小数点后面的所有位来转换为整数。

注意:如果需要做严格的四舍五入运算就要慎用此方法,那就还是得用Math函数

2. 多行字符串 (银弹指数: ⭐️⭐️⭐️⭐️)

var temp1 = "
" + "

" + "<%=data%>" + "

";

这样一段多行的js字符串我们一般通过行尾+字符串来实现连接,这样的写法既不好看,不容易维护,代码量又多,当然我们知道ES6的字符串模版可以轻松实现优雅写法:

const temp2 = `

<%=data%>

`;

想知道在远古时代,我们智慧的劳动人民刀耕火种这样写:

var temp3 = "
\

\ <%=data%>\

\
";

3. 快速输出重复字符串(脑洞指数: ⭐️⭐️⭐️⭐️⭐️)

我们笨办法是

for (var i = 0, temp = ''; i < 200; i++, temp += "leo");console.log(temp)

在ES6+写法中我们使用 "leo".repeat(200)"

在以前我们可以这样抖机灵:

var temp = Array(201).join("leo");

经过提醒,此处用该把200换成了201。

4. 用switch case代替if else(脑洞指数: ⭐️⭐️⭐️⭐️)

这种代替可能会让第一次看到的你觉得脑洞大开:这样玩也行?对的,case后面跟上Boolean判断而不是具体值。

switch (true) {    case (a > 10):        do_something();        break;    case (a < 100):        others();        break;    default:        break;}

5. 截取数组 (奇葩指数: ⭐️⭐️⭐️)

var arr = [1,2,3,4,5,6];arr = arr.slice(0,3);

我们可以利用length在这种情况

var arr = [1,2,3,4,5,6];arr.length=3;

6. 获取数组中的最大值和最小值 (实用指数: ⭐️⭐️⭐️⭐️)

var numbers = [ 5, 458, 120, -215, 228, 400, 122205, -85411 ];var maxInNumbers = Math.max.apply(Math, numbers);var minInNumbers = Math.min.apply(Math, numbers);

7. 日期转数字 (银弹指数: ⭐️⭐️⭐️)

var time1 = new Date().getTime();

我们可以这样

var time2 = + new Date();

8. 用 && || ?: , 节省代码行数 (用多了会被打指数: ⭐️⭐️⭐️⭐️⭐️)

在我们代码简短的判断逻辑,我们经常会使用运算符去实现,用if else反而显得不简洁,特别注意用,可以把多个短句合成一句。

data = {        currpage: (obj.role == 4 || obj.role == 7) ? ++_this.curpage_store : ++_this.curpage_agent,        ajaxType: 'GET'}!localData[type][number] && (localData[type][number] = data, localStorage.setItem(this.jobid, JSON.stringify(localData)));!$allCity.hasClass('active') ?            ($(this).addClass('active'), $allCity.addClass('active'), lastPos = xk_www.$bd.scrollTop()) :            ($(this).removeClass('active'), $allCity.removeClass('active'), lastPos != null && xk_www.$bd.animate({                scrollTop: lastPos            }));

9. 隐式转换 (实用指数: ⭐️⭐️⭐️⭐️⭐️)

data.isDeep == ‘0’;    // 有时候返回的deep可能为0可能为“0”data.isDeep > 0 ;...

合理优雅的运用JavaScript的弱类型特点的灵活性,可以在很多时候巧妙地做到节省代码量,如果我们很好掌握隐式转换,比如在很多时候我们用==反而比===更得心应手,用>的布尔比较反而比严格的类型检查和值比较更快捷。

10. 利用对象数组取值、方法 (实用指数: ⭐️⭐️⭐️⭐️)

const config={    1:"周一",    2:"周二",    3:"周三",    4:"周四",    5:"周五",    6:"周六",    7:"周日",};config[1];const doSomething={    a(){        ...    }    b(){        ...    }    c(){        ...    }    d(){        ...    }}doSomething("a");

11. 匿名函数的N种写法 (涨姿势指数: ⭐️⭐️⭐️⭐️)

js的匿名函数是未申明函数名的自执行函数,格式是这样的

(function(){})();

但是在实际项目中,我们经常这么些,在前面加上;或者+

;function(){}();+function(){}();

虽然JS的语法是可以省略分号的,为了避免代码上线后合并压缩成一个文件可能造成的语法错误,所以加上“;”可以避免未知错误。

而“+”在这里是运算符,运算符具有极高的优先级,所以右边的函数声明加上括号的部分(实际上就是函数执行的写法)就直接执行了。其实不止前面可以是“+”号,“-”、“!”、“~”、“++”等运算符均可。

转载地址:http://rqcio.baihongyu.com/

你可能感兴趣的文章
获取.propertys文件获取文件内容
查看>>
Redis3.0.5配置文件详解
查看>>
Know about Oracle RAC Heartbeat
查看>>
JQuery——实现Ajax应用
查看>>
前端05.js入门之BOM对象与DOM对象。
查看>>
oracle kill所有plsql developer进程
查看>>
keepalived双机热备原理及实例部署LVS+keepalived
查看>>
曲线学习PyQt5方案一
查看>>
OpenCV学习】矩阵运算和操作2
查看>>
nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器
查看>>
关于在arm裸板编程时使用printf问题的解决方法
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
SSH原理与运用(一):远程登录
查看>>
动态代理解决网站字符集编码
查看>>
后台统计
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>