9个JavaScript日常开发小技巧


Posted in Javascript onOctober 06, 2020

1.生成指定范围的数字

在某些情况下,我们会创建一个处在两个数之间的数组。假设我们要判断某人的生日是否在某个范围的年份内,那么下面是实现它的一个很简单的方法

let start = 1900, end = 2000;
[...new Array(end + 1).keys()].slice(start);
// [ 1900, 1901, ..., 2000]
// 还有这种方式,但对于很的范围就不太稳定

Array.from({ length: end - start + 1 }, (_, i) => start + i);

2.使用值数组作为函数的参数

在某些情况下,我们需要将值收集到数组中,然后将其作为函数的参数传递。 使用 ES6,可以使用扩展运算符(...)并从[arg1, arg2] > (arg1, arg2)中提取数组:

const parts = {
 first: [0, 2],
 second: [1, 3],
}

["Hello", "World", "JS", "Tricks"].slice(...parts.second)
// ["World", "JS"]

3.将值用作 Math 方法的参数

当我们需要在数组中使用Math.max或Math.min来找到最大或者最小值时,我们可以像下面这样进行操作:

const elementsHeight = [...document.body.children].map(
 el => el.getBoundingClientRect().y
);
Math.max(...elementsHeight);
// 474

const numbers = [100, 100, -1000, 2000, -3000, 40000];
Math.min(...numbers);
// -3000

4.合并/展平数组中的数组

Array 有一个很好的方法,称为Array.flat,它是需要一个depth参数,表示数组嵌套的深度,默认值为1。 但是,如果我们不知道深度怎么办,则需要将其全部展平,只需将Infinity作为参数即可 ?

const arrays = [[10], 50, [100, [2000, 3000, [40000]]]]

arrays.flat(Infinity)
// [ 10, 50, 100, 2000, 3000, 40000 ]

5. 防止代码崩溃

在代码中出现不可预测的行为是不好的,但是如果你有这种行为,你需要处理它。

例如,常见错误TypeError,试获取undefined/null等属性,就会报这个错误。

const found = [{ name: "Alex" }].find(i => i.name === 'Jim')

console.log(found.name)
// TypeError: Cannot read property 'name' of undefined

我们可以这样避免它:

const found = [{ name: "Alex" }].find(i => i.name === 'Jim') || {}

console.log(found.name)
// undefined

6. 传递参数的好方法

对于这个方法,一个很好的用例就是styled-components,在ES6中,我们可以将模板字符中作为函数的参数传递而无需使用方括号。 如果要实现格式化/转换文本的功能,这是一个很好的技巧:

const makeList = (raw) =>
 raw
  .join()
  .trim()
  .split("\n")
  .map((s, i) => `${i + 1}. ${s}`)
  .join("\n");

makeList`
Hello, World
Hello, World
`;
// 1. Hello,World
// 2. World,World

7.交换变量

使用解构赋值语法,我们可以轻松地交换变量 使用解构赋值语法 ?:

let a = "hello"
let b = "world"

// 错误的方式
a = b
b = a
// { a: 'world', b: 'world' }

// 正确的做法
[a, b] = [b, a]
// { a: 'world', b: 'hello' }

8.按字母顺序排序

需要在跨国际的项目中,对于按字典排序,一些比较特殊的语言可能会出现问题,如下所示 ?

// 错误的做法
["a", "z", "ä"].sort((a, b) => a - b);
// ['a', 'z', 'ä']

// 正确的做法
["a", "z", "ä"].sort((a, b) => a.localeCompare(b));
// [ 'a', 'ä', 'z' ]

 localeCompare() :用本地特定的顺序来比较两个字符串。

9.隐藏隐私

最后一个技巧是屏蔽字符串,当你需要屏蔽任何变量时(不是密码),下面这种做法可以快速帮你做到:

const password = "hackme";
password.substr(-3).padStart(password.length, "*");
// ***kme

掌握这些小技巧,在日常开发过程中可以避免很多不必要的错误,更多关于JavaScript日常开发小技巧请查看下面的相关链接

Javascript 相关文章推荐
初窥JQuery(二)事件机制(2)
Dec 06 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
Mar 20 Javascript
判断字符串的长度(优化版)中文占两个字符
Oct 30 Javascript
基于JavaScript实现移除(删除)数组中指定元素
Jan 04 Javascript
基于JQuery实现图片上传预览与删除操作
May 24 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
javascript常用经典算法详解
Jan 11 Javascript
前端开发必知的15个jQuery小技巧
Jan 22 Javascript
express+vue+mongodb+session 实现注册登录功能
Dec 06 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
Feb 28 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 Javascript
详解ES6中class的实现原理
Oct 03 #Javascript
在vue中使用Echarts画曲线图的示例
Oct 03 #Javascript
vue 虚拟DOM的原理
Oct 03 #Javascript
vue使用video插件vue-video-player的示例
Oct 03 #Javascript
区分vue-router的hash和history模式
Oct 03 #Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 #Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 #Javascript
You might like
第一个无线电台是由谁发明的
2021/03/01 无线电
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
vue select选择框数据变化监听方法
2018/08/24 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
Wilson体育用品官网:美国著名运动器材品牌
2019/05/12 全球购物
Chain Reaction Cycles俄罗斯:世界上最大的在线自行车商店
2019/08/27 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
经济贸易系求职信
2014/08/04 职场文书
电力工程合作意向书
2015/05/11 职场文书
离职证明范本
2015/06/12 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书