10个JS技巧
1.过滤唯一值
Set 对象是es6新引入的,配合扩展运算符[...]一起使用,我们可以用它来过滤数组的唯一值。
const array = [1, 1, 2, 3, 5, 5, 1]
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // Result: [1, 2, 3, 5]
2.与或运算
三元运算符是编写简单条件语句的快速方法,如下例子:
x > 100 ? 'above 100' : 'Below 100';
x > 100 ? (x > 200 ? 'above 200' : 'Between 100-200') : 'Below 100';
有时候使用三元运算符处理也会很复杂。我们可以使用与(&&)或(||)运算符来写表达式。这通常被称为‘短路’或‘短路运算’。
它是怎么工作的
使用&&将返回第一个为假的值。如果每个操作计算的值都为true,则返回最后一个计算过的表达式。
let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
console.log(0 && null); // Result: 0
使用||
将返回第一个为真
的值。如果每个操作数的计算结果都为false
,则返回最后一个计算过的表达式。
let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
console.log(0 || null); // Result: null
eg1:
假设我们想返回一个变量的长度,但是我们不知道变量的类型。
我们可以使用if/else
语句来检查foo
是可接受的类型,但是这可能会变得非常冗长。或运行可以帮助我们简化操作
return (foo || []).length
如果foo是true,它将被返回。否则返回空数组的长度。
eg1:
你是否遇到过访问嵌套对象属性的问题?你可能不知道对象或其中一个子属性是否存在,这可能会导致令人沮丧的错误。
假设我们想在this.state
中访问一个名为data
的属性,但是在我们的程序成功返回一个获取请求之前,data
是未定义的。
根据我们使用它的位置,调用this.state.data
可能会阻止我们的应用程序运行。为了解决这个问题,我们可以将其做进一步的判断:
if (this.state.data) {
return this.state.data;
} else {
return 'Fetching Data';
}
但这似乎很重复。'或'
运算符提供了更简洁的解决方案:
return (this.state.date || 'Fetching Data');
3.转化为布尔值
除了另有定义,否则JavaScript中所有的值都是真值,假值有0,"", null, undefined, NaN,false。
const isTrue = !0;
const isFalse = !1;
const alsoFalse = !!0;
console.log(isTrue); // Result: true
console.log(isFalse ); // Result: false
console.log(typeof true); // Result: "boolean"
4.转化为字符串
要快速地将数字转换为字符串,我们可以使用连接运算符+
后跟一组空引号""
。
const val = 1 + "";
console.log(val); // Result: "1"
console.log(typeof val); // Result: "string"
5.转化为数字
let int = "15";
int = +int;
console.log(int); // Result: 15
console.log(typeof int); Result: "number"
6.性能更好的运算
从ES7开始,可以使用指数运算符**
作为幂的简写,这比编写Math.pow(2, 3)
更快。这是很简单的东西,但它之所以出现在列表中,是因为没有多少教程更新过这个操作符。
console.log(2 ** 3); // Result: 8
7.快速浮点数转整数
如果希望将浮点数转换为整数,可以使用Math.floor()
、Math.ceil()
或Math.round()
。但是还有一种更快的方法可以使用|
(位或运算符)将浮点数截断为整数。
console.log(23.9 | 0); // Result: 23
console.log(-23.9 | 0); // Result: -23
8.数组截断
如果要从数组的末尾删除值,有比使用splice()
更快的方法。
例如,如果你知道原始数组的大小,您可以重新定义它的length
属性,就像这样
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;
console.log(array); // Result: [0, 1, 2, 3]
这是一个特别简洁的解决方案。但是,我发现slice()
方法的运行时更快。如果速度是你的主要目标,考虑使用:
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);
console.log(array); // Result: [0, 1, 2, 3]
9.获取数组中的最后一项
数组方法slice()
可以接受负整数,如果提供它,它将接受数组末尾的值,而不是数组开头的值。
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array.slice(-1)); // Result: [9]
console.log(array.slice(-2)); // Result: [8, 9]
console.log(array.slice(-3)); // Result: [7, 8, 9]
10.获取数组中的最后一项
最后,你之前可能已经使用过JSON.stringify
,但是您是否意识到它还可以帮助你缩进JSON?
stringify()
方法有两个可选参数:一个replacer
函数,可用于过滤显示的JSON和一个空格
console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, '\t'));
// Result:
// '{
// "alpha": A,
// "beta": B
// }'
10个JS技巧的更多相关文章
- 提升开发幸福感的10条JS技巧
鱼头总结一些能够提高开发效率的JS技巧,这些技巧很实用,觉得挺好,想推荐给大家,所以有了这篇文章. 生成随机UID const genUid = () => { var length = 20 ...
- JS技巧
2016-08-09 200多个js技巧代码(Down) word下载 200多个js技巧代码 目录 1.文本框焦点问题... 6 2.网页按钮的特殊颜色... 6 3.鼠标移入移出时颜色变化... ...
- 你应该了解的25个JS技巧
目录 1. 类型检查小工具 2. 检查是否为空 3. 获取列表最后一项 4. 带有范围的随机数生成器 5. 随机 ID 生成器 6. 创建一个范围内的数字 7. 格式化 JSON 字符串,string ...
- 10 个实用技巧,让 Finder 带你飞
Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 Mac 里的几乎所有东西,包括应用程序.文件 ...
- Visual Studio 原生开发的10个调试技巧(二)
原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原 ...
- ★10 个实用技巧,让Finder带你飞~
10 个实用技巧,让 Finder 带你飞 Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 ...
- ★10 个实用技巧,让Finder带你飞~
10 个实用技巧,让 Finder 带你飞 Finder 是 Mac 电脑的系统程序,有的功能类似 Windows 的资源管理器.它是我们打开 Mac 首先见到的「笑脸」,有了它,我们可以组织和使用 ...
- 使用google搜索时的10个小技巧!
为大家分享一些google的技巧,很多工作了好几年的同学还不知道如何高效的利用这些技巧,希望同学们掌握!此为google的技巧,百度现在也基本上都实现了这些功能. 使用搜索引擎的10个搜索技巧 ...
- (译)MySQL的10个基本性能技巧
原文出处:https://www.infoworld.com/article/3210905/sql/10-essential-performance-tips-for-mysql.html MySQ ...
随机推荐
- Mysql主从复制参数详解
目录 一.简介 二.例子 同步 修改 三.参数 一.简介 change master to配置和改变slave服务器用于连接master服务器的参数,以便slave服务器读取master服务器的bin ...
- 数据挖掘实战 - 天池新人赛o2o优惠券使用预测
数据挖掘实战 - o2o优惠券使用预测 一.前言 大家好,家人们.今天是2021/12/14号.上次更新是2021/08/29.上篇文章中说到要开两个专题,果不其然我鸽了,这一鸽就是三个多月.今天,我 ...
- Linux网络编程入门
(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ...
- SpringCloud微服务实战——搭建企业级开发框架(三十三):整合Skywalking实现链路追踪
Skywalking是由国内开源爱好者吴晟(原OneAPM工程师)开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点.是一款基于分 ...
- [BUUCTF]REVERSE——刮开有奖
刮开有奖 附件 步骤: 例行检查,无壳,32位程序 32位ida载入,shift+f12检索程序里的字符串,看到了一个base64加密的特征字符串,猜想这题用到了base64加密 从main函数开始看 ...
- 3、回溯算法解题套路框架——Go语言版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- LuoguP7714 「EZEC-10」排列排序 题解
Content 给定一个 \(1\sim n\) 的一个排列 \(p\),你每次可以选择一个区间 \([l,r]\) 并花费 \(r-l+1\) 的代价将下标在这个区间内的所有数升序排序,求使得排列 ...
- shell判断新字符串列表是否在老字符串列表中
for sn in `cat 12.30-new`;do if ! [[ `cat 12.30-old` =~ $sn ]];then echo $sn; fi; done
- word文档打钩记录快捷键
先按住键盘上的 Alt 键不放,然后在小键盘区(数字键区)输入 9745 ,最后松开 Alt键.
- 辅助函数和高阶函数 map、filter、reduce
辅助函数和高阶函数 map.filter.reduce: 一.辅助函数:(1-1)响应式函数 (数组更新检测): push() pop() shift() unshift() ...