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 相关文章推荐
JSON.parse 解析字符串出错的解决方法
Jul 08 Javascript
jquery.cookie() 方法的使用(读取、写入、删除)
Dec 05 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
switch语句的妙用(必看篇)
Oct 03 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
ES6新特性五:Set与Map的数据结构实例分析
Apr 21 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
vue如何引入sass全局变量
Jun 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
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP面试常用算法(推荐)
2016/07/22 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
php实现微信发红包功能
2018/07/13 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
[01:33]一分钟玩转DOTA2第三弹:DOTA2&DotA快捷操作大对比
2014/06/04 DOTA
[06:25]DOTA2英雄梦之声_第17期_大地之灵
2014/06/20 DOTA
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
[01:02:02]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第二局
2016/02/25 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python实现KNN邻近算法
2021/01/28 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
用python实现一个简单的验证码
2020/12/09 Python
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
党委书记个人对照检查材料
2014/09/15 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
罚款通知怎么写
2015/04/22 职场文书