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 相关文章推荐
JS Timing
Apr 21 Javascript
javascript 跳转代码集合
Dec 03 Javascript
提升你网站水平的jQuery插件集合推荐
Apr 19 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
Apr 12 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
Mar 18 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
vue keep-alive请求数据的方法示例
May 16 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
Jul 20 Javascript
iconfont的三种使用方式详解
Aug 05 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
详解JS深拷贝与浅拷贝
Aug 04 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
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
php的debug相关函数用法示例
2016/07/11 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
js创建对象的区别示例介绍
2014/07/24 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
JQuery自适应窗口大小导航菜单附源码下载
2015/09/01 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
[01:04:05]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python构建XML树结构的方法示例
2017/06/30 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python 修改本地网络配置的方法
2019/08/14 Python
python创建学生管理系统
2019/11/22 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
幼师自我鉴定
2014/02/01 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
劳资员岗位职责
2015/02/13 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
新郎结婚感言
2015/07/31 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
docker-compose部署Yapi的方法
2022/04/08 Servers