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实现点击文本框弹出热门标签的提示效果
Nov 17 Javascript
JS保留两位小数 四舍五入函数的小例子
Nov 20 Javascript
jquery动态改变div宽度和高度
Feb 09 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
Apr 30 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
jQuery页面弹出框实现文件上传
Feb 09 Javascript
JS得到当前时间的方法示例
Mar 24 Javascript
Angularjs的启动过程分析
Jul 18 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
Mar 28 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
JavaScript如何优化逻辑判断代码详解
Jun 08 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文件上传主要代码讲解
2013/09/30 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
Yii框架布局文件的动态切换操作示例
2019/11/11 PHP
juqery 学习之三 选择器 可见性 元素属性
2010/11/25 Javascript
最短的IE判断代码
2011/03/13 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
jQuery实现仿美橙互联两级导航菜单效果完整实例
2015/09/17 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
webpack中使用iconfont字体图标的方法
2018/02/22 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
Python获取Linux系统下的本机IP地址代码分享
2014/11/07 Python
通过C++学习Python
2015/01/20 Python
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
公司市场部岗位职责
2013/12/02 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
自我鉴定总结
2014/03/24 职场文书
硕士学位论文评语
2014/12/31 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers