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 相关文章推荐
免费空间广告万能消除代码
Sep 04 Javascript
jQuery数组处理方法汇总
Jun 20 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
Nov 14 Javascript
jquery mobile事件多次绑定示例代码
Sep 13 Javascript
Egret引擎开发指南之运行项目
Sep 03 Javascript
jQuery插件Echarts实现的双轴图效果示例【附demo源码下载】
Mar 04 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
swiper实现导航滚动效果
Dec 13 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/03 咖啡文化
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
php 无法载入mysql扩展
2010/03/12 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
2014/08/21 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
AngularJS优雅的自定义指令
2016/07/01 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python3操作SQL Server数据库(实例讲解)
2017/10/21 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
如何整合JQuery和Prototype
2014/01/31 面试题
爱情保证书范文
2014/02/01 职场文书
励志演讲稿800字
2014/08/21 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
开天辟地观后感
2015/06/09 职场文书
五一放假通知怎么写
2015/08/18 职场文书
欧元符号 €
2022/02/17 杂记
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL