网站首页 > 基础教程 正文
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",然后再统一截取后两位字符。这样做确实很聪明,很好的达到了格式化的目的。
如果觉得本篇文章对你有帮助,请帮忙转发~
欢迎点赞,评论,收藏,转发,您的支持是我继续创作的动力~
猜你喜欢
- 2024-11-19 JavaScript 根据指定的字符串格式格式化日期
- 2024-11-19 前端时间格式化下,让用户看时间一看就懂的方法
- 2024-11-19 WPS表格如何在宏代码中判断日期类型及获取年、月、日
- 2024-11-19 快来领取,33个常用JavaScript功能已封装成方法,拿来即用
- 2024-11-19 JavaScript中的日期对象
- 2024-11-19 十年前的js代码
- 2024-11-19 如何在JavaScript/Vue中获取当前时间并格式化输出精确到时分秒
- 2024-11-19 JavaScript学习笔记(十四)
- 2024-11-19 Node.js 实现抢票小工具&短信通知提醒(下)「干货」
- 2024-11-19 JS短文:如何确定一个月中有多少天?
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- deletesql (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)