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 相关文章推荐
弹出广告特效(一个IP只弹出一次)的代码
Jul 27 Javascript
JS 动态加载脚本的4种方法
May 05 Javascript
javascript 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
Sep 03 Javascript
JavaScript中的运算符种类及其规则介绍
Sep 26 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
Jan 25 Javascript
NODE.JS加密模块CRYPTO常用方法介绍
Jun 05 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
vue 组件中slot插口的具体用法
Apr 03 Javascript
Vue2 轮播图slide组件实例代码
May 31 Javascript
JavaScript模拟实现自由落体效果
Aug 28 Javascript
vuejs实现下拉框菜单选择
Oct 23 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读取javascript设置的cookies的代码
2010/04/12 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
php生成扇形比例图实例
2013/11/06 PHP
Symfony页面的基本创建实例详解
2015/01/26 PHP
两款万能的php分页类
2015/11/12 PHP
javascript插入样式实现代码
2012/02/22 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
使用js写的一个简易的投票
2013/11/27 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
javascript arguments使用示例
2014/12/16 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
详解Angular 自定义结构指令
2017/06/21 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
微信小程序progress组件使用详解
2018/01/31 Javascript
如何从零开始利用js手写一个Promise库详解
2018/04/19 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
ES10的13个新特性示例(小结)
2019/09/23 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Python删除n行后的其他行方法
2019/01/28 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
Dyson加拿大官方网站:购买戴森吸尘器,风扇,冷热器及配件
2016/10/26 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
大学学习生活感言
2014/01/18 职场文书
预备党员公开承诺书
2014/05/28 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
长江三峡导游词
2015/01/31 职场文书
会计主管竞聘书
2015/09/15 职场文书
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
详解Python中的for循环
2022/04/30 Python