JavaScript开发技巧(上篇)

JavaScript开发技巧(上篇)

  • 1、前言
  • 2、从数组中删除假值
  • 3、数组搜索
  • 4、空值合并运算符
  • 5、逻辑或赋值运算符
  • 6、多值匹配
  • 7、三元表达式
  • 8、短路评估
  • 9、科学计数法
  • 10、位运算符
  • 11、指数求幂

1、前言

JavaScript中有很多速记技巧,可以缩短代码长度,减少冗余,提高代码的可读性和可维护性。本文将介绍提高效率的JS缩写技巧,帮助你告别写垃圾的生活,轻松写出优雅的代码!

2、从数组中删除假值

您可以使用 filter() 组合布尔值来简化从数组中删除假值的过程。false 值是指将 false 视为条件的值,例如 null、未定义、空字符串(“”或 ‘’)、0、NaNfalse

传统写法:

let arr = [12, null, 0, 'xyz', null, -25, NaN, '', undefined, 0.5, false];let filterArray = arr.filter(value => {if(value) {return value};
}); 
console.log(filterArray)  // [12, 'xyz', -25, 0.5]

简化写法:

let arr = [12, null, 0, 'xyz', null, -25, NaN, '', undefined, 0.5, false];let filterArr = arr.filter(value => Boolean(value));  // [12, 'xyz', -25, 0.5]

更简洁的写法:

let arr = [12, null, 0, 'xyz', null, -25, NaN, '', undefined, 0.5, false];let filterArray = arr.filter(Boolean);  // [12, 'xyz', -25, 0.5]

BooleanJavaScript 的内置构造函数,通过将值传递给它来将值转换为布尔值。在本例中,Boolean 构造函数作为回调函数传递给 filter() 方法,从而将每个数组元素转换为布尔值。只有转换结果为 true 的元素才会保留在新数组中。

注意:该方法也会过滤掉0。如果不需要过滤掉0,则需要额外判断。

3、数组搜索

当搜索数组时,indexOf()用于获取搜索项的位置。如果未找到该项目,则返回值为-1。在 JavaScript 中,0 被视为 false,大于或小于 0 的数字被视为 true。因此,需要这样写:

传统写法:

if(arr.indexOf(item) > -1) { 
}
if(arr.indexOf(item) === -1) {
}

简化写法:

if(~arr.indexOf(item)) {}
if(!~arr.indexOf(item)) {}

按位 NOT (~) 运算符对于除 -1 之外的任何值都返回“真”值。要否定它,只需使用 !~ 即可。或者,您可以使用includes()函数:

if(arr.includes(item)) {}

4、空值合并运算符

null 合并运算符 (??) 用于为 null.undefined 的变量提供默认值

传统写法:

const fetchUserData = () => {return 'Xiuer Old';
};const data = fetchUserData();
const username = data !== null && data !== undefined ? data : 'Guest';

简化写法:

const fetchUserData = () => {return 'Xiuer Old';
};const data = fetchUserData();
const username = data ?? 'medium';

另外,还有一个空合并赋值运算符(??=),用于当变量为空(null或undefined)时执行赋值操作。

传统写法:

let variable1 = null;
let variable2 = "Xiuer Old";if (variable1 === null || variable1 === undefined) {variable1 = variable2;
}

简化写法:

let variable1 = null;
let variable2 = "Xiuer Old";variable1 ??= variable2;

??=写法更简洁,更容易阅读。它首先检查变量 1 是否为 null 或未定义,如果是,则将值赋给变量 2。如果variable1已经有一个非空值,则不会发生赋值。

5、逻辑或赋值运算符

逻辑或赋值运算符 (||=) 用于为变量指定默认值。

传统写法:

let count;
if (!count) {count = 0;
}

简化写法:

let count;
count ||= 0;

count 为假值(例如 undefinednullfalse0NaN 或空字符串)时,逻辑 OR 赋值运算符将赋值 0count 否则,它保留 count 的原始值。

6、多值匹配

对于多个值的匹配,可以将所有值放入一个数组中,然后使用indexOf()方法进行检查。indexOf() 方法是 JavaScript 数组的内置方法,用于返回指定元素在数组中第一次出现的位置索引。如果数组中不存在该元素,则返回-1

传统写法:

if (value === 1 || value === 'one' || value === 2 || value === 'two') {// ...
}

简化写法:

if ([1, 'one', 2, 'two'].indexOf(value) >= 0) {// ...
}

7、三元表达式

这可以使用三元表达式 if...else 来简化。

传统写法:

let isAdmin;
if (user.role === 'admin') {isAdmin = true;
} else {isAdmin = false;
}

简化写法:

const isAdmin = user.role === 'admin' ? true : false;

更简化的写法:

const isAdmin = user.role === 'admin';

8、短路评估

将一个变量的值分配给另一个变量时,您可能需要确保源变量不为 null、未定义或为空。您可以编写包含多个条件的长 if 语句,或使用短路求值来简化。

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {let variable2 = variable1;
}

使用短路评估简化的代码如下:

const variable2 = variable1 || 'new';

对于逻辑 OR (||) 运算符,以下值被视为 false

false0空字符串(“”或“”)nullundefinedNaN

因此,如果值本身可能是其中之一,则不适合使用短路评估。

短路评估还可以避免函数调用中不必要的函数执行。

传统写法:

function fetchData() {if (shouldFetchData) {return fetchDataFromAPI();} else {return null;}
}

简化写法:

function fetchData() {return shouldFetchData && fetchDataFromAPI();
}

shouldFetchDatatrue 时,短路评估继续执行函数的 fetchDataFromAPI() 并返回其结果。如果shouldFetchData为假值,短路求值将直接返回假值(null),避免不必要的函数调用。

9、科学计数法

可以使用科学和技术方法来表示数字以省略尾随零。例如,1e7it 实际上意味着 1 后面跟着 7 个零。它代表 10,000,000 的十进制等值。

传统写法:

for (let i = 0; i < 10000; i++) {}

简化写法:

for (let i = 0; i < 1e7; i++) {}
// 下面的所有比较都将返回 true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

10、位运算符

双位 NOT 运算符有一个非常实际的用途,您可以用它来替换 Math.floor() 函数,在执行相同操作时速度更快。

传统写法:

Math.floor(4.9) === 4  //true

简化写法:

~~4.9 === 4  //true

11、指数求幂

指数求幂运算可以使用 * 来简化。

传统写法:

Math.pow(2,3); // 8
Math.pow(2,2); // 4
Math.pow(4,3); // 64

简化写法:

2**3 // 8
2**4 // 4
4**3 // 64

ES7(ECMAScript 2016)开始,JavaScript引入了指数幂运算符**,使指数幂运算更加简洁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原创】java+swing+mysql个人理财管理系统设计与实现

摘要&#xff1a; 个人理财管理系统是一款帮助用户有效管理个人财务的软件&#xff0c;本文将详细介绍该系统的设计过程&#xff0c;包括功能模块、数据库设计、界面设计等&#xff0c;系统采用javaswingmysql技术组合。 功能分析&#xff1a; 系统主要提供给管理员、用户使…

金蝶云星空创建自动下推并保存公共服务

文章目录 金蝶云星空创建自动下推并保存公共服务创建公共方法按单下推数据按明细行下推数据调用下推操作 调用公共方法 金蝶云星空创建自动下推并保存公共服务 创建公共方法 按单下推数据 /// <summary>/// 获取单据转换数据包/// </summary>public DynamicObjec…

M3重磅来袭 苹果多款新品上架

10月31日早上8点&#xff0c;苹果举行了新品发布会&#xff0c;正式发布了M3、M3 Pro、 M3 Max芯片&#xff0c;以及基于新款芯片打造的14英寸和16英寸MacBook Pro、新款iMac。 我们现在花一分钟&#xff0c;简单了解一下这次的新品。 M3、M3 Pro、M3 Max M3系列芯片就是M2系…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

Spring 事务不生效的几种场景

Spring 事务不生效的几种场景 详细内容参考以下链接&#xff0c;这个链接是原文&#xff1a; spring 事务不生效的15中场景 非原创。 以下内容只是为了学习&#xff0c;加深印象&#xff0c;仅作为个人学习笔记&#xff0c; 请支持原创&#xff0c;内容请点击 spring 事务不生效…

链动2+1模式:白酒产品的营销新策略

链动21模式是一种创新的营销模式&#xff0c;结合白酒产品更能发挥其优势。该模式通过独特的身份晋升和奖励机制&#xff0c;快速建立销售渠道&#xff0c;提高用户粘性。 一、核心机制 身份晋升机制&#xff1a;用户购买指定499白酒产品后成为代理&#xff0c;再邀请两位用户…

新风机如何联动?

数据中心的运行会产生大量的热量&#xff0c;因为其中包含了大量的服务器、存储设备以及网络设备等&#xff0c;它们需要消耗大量的电力来进行计算和数据处理。为了保证这些设备运行的稳定性和性能&#xff0c;数据中心必须维持适宜的温度和湿度。 新风系统可以在数据中心中起到…

小米澎湃OS发布,雷军小米的“统一”大棋局

千呼万唤始出来。2023年10月26日&#xff0c;小米澎湃OS终于揭开面纱。 雷军在主题为“跨越时刻”的发布会上&#xff0c;正式发布了小米澎湃OS。面对这款历时七年打造的全新操作系统&#xff0c;雷军难掩兴奋&#xff0c;他感慨道&#xff1a;“我心澎湃”。 小米新操作系统取…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

CB2-2CARD的openSUSE远程SSH登录提示优化

CB2-2CARD的openSUSE远程SSH登录提示优化 1. 源由2. 优化内容2.1 去掉Password/banner前后的prompts提示语句2.2 增加logo登录界面2.3 增加系统运行情况简单汇报2.4 增加banner 3. 优化效果 1. 源由 之前运行的CB2-2CARD的openSUSE安装&NAS环境配置服务器已经运行也有段时…

(c语言进阶)字符串函数、字符分类函数和字符转换函数

一.求字符串长度 1.strlen() (1)基本概念 头文件&#xff1a;<string.h> (2)易错点&#xff1a;strlen()的返回值为无符号整形 #include<stdio.h> #include<string.h> int main() {const char* str1 "abcdef";const char* str2 "bbb&q…

审核 Microsoft SQL Server 日志

手动审核数据库活动是一项艰巨的任务&#xff0c;有效完成审计的最佳方法是使用简化和自动化数据库监控的综合解决方案&#xff0c;该解决方案还应使数据库管理员能够监控、跟踪和即时识别任何操作问题的根本原因&#xff0c;并实时检测对机密数据的未经授权的访问。 什么是 S…

前端面试 面试多起来了

就在昨天 10.17 号,同时收到了三个同学面试的消息。他们的基本情况都是双非院校本科、没有实习经历、不会消息中间件和 Spring Cloud 微服务,做的都是单体项目。但他们投递简历还算积极,从今年 9 月初就开始投递简历了,到现在也有一个多月了。 来看看,这些消息。 为…

找到Linux中最大的目录和文件

寻找下一层最大的文件夹 du -h --max-depth1Linux上查找最大文件的3种方法 第一种&#xff1a;ls 最简单的方法就是借助 ls 命令&#xff0c;因为 ls 命令本身输出是带文件大小信息的。 比如&#xff0c;我要列出 /data/log/ 目录中的20个最大文件&#xff0c;可以&#xf…

中文编程工具免费版下载,中文开发语言工具免费版下载

中文编程工具免费版下载&#xff0c;中文开发语言工具免费版下载 中文编程工具开发的实际部分案例如下图 编程系统化课程总目录及明细&#xff0c;点击进入了解详情。 https://blog.csdn.net/qq_29129627/article/details/134073098?spm1001.2014.3001.5502

RabbitMQ消息中间件

一、初始MQ 首先了解一下微服务间通讯有同步和异步两种方式&#xff1a;- 同步通讯&#xff1a;是指两个或多个系统在进行信息交换时&#xff0c;必须在同一时刻进行操作 - 异步通讯&#xff1a;是指两个或多个系统之间的通讯方式&#xff0c;其中发送方和接收方不是在同一时刻…

星环科技分布式向量数据库Transwarp Hippo正式发布,拓展大语言模型时间和空间维度

随着企业、机构中非结构化数据应用的日益增多以及AI的爆发式增长所带来的大量生成式数据&#xff0c;所涉及的数据呈现了体量大、格式和存储方式多样、处理速度要求高、潜在价值大等特点。但传统数据平台对这些数据的处理能力较为有限&#xff0c;如使用文件系统、多类不同数据…

MySQL数据库容量规划与扩容方法详解

一、前言 随着业务的增长&#xff0c;MySQL数据库的容量需求也会不断增加&#xff0c;因此&#xff0c;合理的容量规划和扩容方法显得尤为重要。本文将介绍如何根据业务需求进行MySQL数据库容量规划&#xff0c;并给出具体的扩容方法。 二、容量规划原则 根据业务需求预测未…

Vue显示FFmpeg推的流

零、环境安装 小弟的另一篇文章&#xff1a; FFmpeg和rtsp服务器搭建视频直播流服务-CSDN博客 一、FFmpeg推流 1、拉取rtsp摄像头流 sudo ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy -f rtsp rtsp://10.168.3.196:8554/mystream2、推视频的rtmp流 sudo ffm…

这一份免费API接口集合,开发者必备

台风信息查询&#xff1a;提供西北太平洋及南海地区过去两年及当前年份所有编号台风的信息查询&#xff0c;包括台风实时位置、过去路径、预报路径及登陆信息等要素。未来7天生活指数&#xff1a;支持国内3400个城市以及国际4万个城市的天气指数数据&#xff0c;包括晨练、洗车…