6个非常实用的JavaScript技巧

JavaScript作为一门非常灵活的语言,在开发过程中同样的功能会有很多实现方式。有些小技巧非常好用,不仅能节省开发时间,还能提高代码的可读性,稳定性。最近整理了一些JavaScript的开发小技巧,和大家一起分享。

1.使用展开操作符…取代delete操作

前端开发中经常需要对非必要的字段进行删除,一般情况下大家会采用 delete 操作。举个例子,需要删除 id 属性。

const res = { id: 101, name: 'owen'};delete res.id;console.log(res);  // { name: 'owen' }

这样当然可以实现功能,但是不推荐这样做。首先删除对象属性比较危险,可能导致一些莫名其妙的问题,这些问题往往会很难排查。另外修改了原对象,导致了部分信息的丢失,如果后续需要拷贝对象或者恢复对象属性会很困难。推荐的做法是使用展开操作符

const res = { id: 101, name: 'owen'};const {id, ...rest} = res;console.log(rest);  // { name: 'owen' }

2.使用Boolean过滤数组中false类元素

借助构造函数 Boolean 可以将数组中 false 类的元素过滤掉。false 类指的是在转换为布尔型后为false的值,例如:空字符串,undefined,null,0,NaN。

const res = [0,3,4,'',true,false,null,undefined,'test'];const filterRes = res.filter(Boolean);console.log(filterRes); // [ 3, 4, true, 'test' ] 

3.使用对象作为函数参数

JavaScript的函数和其他语言的函数一样,可以接收多个入参。比如下面的函数:

const func = function(name, age, sex){}

如果有一天这个函数需要添加一个新参数 id,则需要继续扩展。

const func = function(name, age, sex, id){}

为了保持兼容性,参数 id 只能放到最后一位。仅添加参数还不够安全,还需要为新增的参数设置默认值。

const func = function(name, age, sex, id = 0){}// 或者const func = function(name, age, sex, id ){  if (!id) {    id = 0;  }}

随着参数的不断扩展,需要处理的兼容性问题越来越多。因此推荐的做法是使用对象作为参数,还是使用上面的例子,如果使用对象作为参数,函数参数就不需要修改。

const func = function(params){  const { name, age, sex, id } = params;}func({id:10})

借助对象的灵活性,参数的顺序,个数,增减等都非常方便,对项目的影响也最小。

4.使用阅读友好的方式表示数字

在开发中有时候会使用较大数值的常量,比如:亿 – 100000000,一天的毫秒数:86400000,等等。这样较大的数可读性比较差,很难数清楚一共多少个零,更不清楚具体的数值了。

const num = 100000000; // 1亿const ms = 86400000;  // 一天内的毫秒数

推荐使用另一种可读性好的方式表示数值:

const num = 100_000_000; // 1亿// 或者const num = 1e8; // 1亿const ms = 24 * 60 * 60 * 1000;  // 一天内的毫秒数

这样的写法大大提高了代码的可读性,而且对代码的执行没有任何影响。

5.使用set进行数组去重

Set 是 ES6 新增的一种数据类型,它的一大特点就是内部没有重复元素。我们可以利用这一特点对数组进行去重。

const arr = [1,2,3,4,3,2,1];const result = [... new Set(arr)];console.log(result); // [ 1, 2, 3, 4 ]

除了使用展开运算符之外,还可以使用 Array.from

const arr = [1,2,3,4,3,2,1];const result = Array.from(new Set(arr));console.log(result);  // [ 1, 2, 3, 4 ]

6.日期格式化自动补0的小技巧

我们在处理日期展示的时候经常需要将时间戳转换为格式化的日期,比较省力的方法是直接使用日期格式化的包,比如:moment.js。但是有时候你不想因为这个小需求引入一个包,或者你想用原生JavaScript实现格式化。可能的实现是这样的:

const date = new Date();const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();const hour = date.getHours();const min = date.getMinutes();const ss = date.getSeconds();console.log(`${year}-${month}-${day} ${hour}:${min}:${ss}`); // 2021-8-1 10:31:45

但是这样还不符合格式,因为月份,日期,小时,分,秒有可能是一位数字,需要在数字前补0。所以上面的代码还需要修改一下:

const padZero = function(num){  return num < 10   `0${num}` : num;}const date = new Date();const year = date.getFullYear();const month = date.getMonth() + 1;const day = date.getDate();const hour = date.getHours();const min = date.getMinutes();const ss = date.getSeconds();console.log(`${year}-${padZero(month)}-${padZero(day)} ${padZero(hour)}:${padZero(min)}:${padZero(ss)}`); // 2021-08-01 10:38:26

那除了上面的方法还有别的方式吗?JavaScript作为一个非常灵活的语言,一定有其他的实现方式。今天就看到一个巧妙的解决办法。

const date = new Date();const year = date.getFullYear();const month = '0' + (date.getMonth() + 1);const day = '0' + date.getDate();const hour = '0' + date.getHours();const min = '0' + date.getMinutes();const ss = '0' + date.getSeconds();console.log(`${year}-${month.slice(-2)}-${day.slice(-2)} ${hour.slice(-2)}:${min.slice(-2)}:${ss.slice(-2)}`);  // 2021-08-01 13:43:29

先通过统一添加前缀字符”0″,然后再统一截取后两位字符。这样做确实很聪明,很好的达到了格式化的目的。如果觉得本篇文章对你有帮助,请帮忙转发~

欢迎点赞,评论,收藏,转发,您的支持是我继续创作的动力~

剪辑交流

AE换脸教程,视频换脸用ae一个软件做成不

2022-10-16 15:24:41

剪辑交流

她的水下摄影,美轮美奂,气势磅礴,让人称之为好镜头。

2022-10-16 15:26:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索