18 个JS优化技巧,可以解决 90% 的屎山代码!!!

文章目录

  • 18 个JS优化技巧,可以解决 90% 的屎山代码!!!
    • 1.箭头函数
    • 2.解构赋值变量
    • 3.使用模版字面量进行字符拼接
    • 4.使用展开运算符进行数组和对象操作
    • 5.简化循环
    • 6.简化判断
    • 7.使用对象解构和默认参数简化函数参数
    • 8.使用函数式编程概念如纯函数和函数组合
    • 9.使用对象字面量简化对象的创建和定义
    • 10.使用适当的命名和注释来提高代码可读性
    • 11.条件判断优化
      • if else
      • switch case
      • 判断封装
      • Object.assign给默认对象赋默认值
    • 函数参数“两个”以下最好
    • 12.使用解释形语言
    • 13.让对象拥有私有成员-通过闭包来实现

参考:https://blog.csdn.net/techforward/article/details/131961841

18 个JS优化技巧,可以解决 90% 的屎山代码!!!

1.箭头函数

// 传统函数定义
function add(a, b) {return a + b;
}
// 箭头函数简化
const add = (a, b) => a + b;

2.解构赋值变量

// 获取对象中的指定属性值
const firstName = person.firstName;
const lastName =  person.lastName;// 直接赋值对象,指定属性赋值
const { firstName, lastName } = person;console.log(fistName)
console.log(lastName)

3.使用模版字面量进行字符拼接

// 传统字符串拼接
const val = 'Hello ' + name + '!';
// 模板字面量简化
const val = `Hello ${name}!`;

4.使用展开运算符进行数组和对象操作

// 合并数组
const combined = [...array1, ...array2];
// 复制对象
const clone = { ...original };

5.简化循环

// 遍历数组
const doubled = numbers.map(num => num * 2);
// 过滤数组
const evens = numbers.filter(num => num % 2 === 0);

6.简化判断

// 传统条件判断
let message;
if (isSuccess) {message = 'Operation successful';
} else {message = 'Operation failed';
}
// 三元运算
const message = isSuccess ? 'Operation successful' : 'Operation failed';

7.使用对象解构和默认参数简化函数参数

// 传统参数设置默认值
function greet(name) {const finalName = name || 'Guest';console.log(`Hello, ${finalName}!`);}// 对象解构和默认参数简化function greet({ name = 'Guest' }) {console.log(`Hello, ${name}!`);}

8.使用函数式编程概念如纯函数和函数组合

// 纯函数
function add(a, b) {return a + b;}// 函数组合const multiplyByTwo = value => value * 2;const addFive = value => value + 5;const result = addFive(multiplyByTwo(3));

9.使用对象字面量简化对象的创建和定义

// 传统对象创建
const person = {firstName: 'John',lastName: 'Doe',age: 30,};// 对象字面量简化const firstName = 'John';const lastName = 'Doe';const age = 30;const person = { firstName, lastName, age };

10.使用适当的命名和注释来提高代码可读性

11.条件判断优化

if else

// param {status} status 活动状态:1:成功 2:失败 3:进行中 4:未开始
let txt = '';
if (status == 1) {txt = "成功";
} else if (status == 2) {txt = "失败";
} else if (status == 3) {txt = "进行中";
} else {txt = "未开始";
}

switch case

let txt = '';
switch (status) {case 1:txt = "成功";break;case 2:txt = "成功";break;case 3:txt = "进行中";break;default:txt = "未开始";
}

判断封装

// 好的
shouldShowSpinner(fsm, listNode){return fsm.state === 'fetching' && isEmpty(listNode)
}
if(shouldShowSpinner(fsm, listNode)){//...doSomething
}

Object.assign给默认对象赋默认值

const menuConfig = {title: 'Order',buttonText: 'Send',cancellable: true
};
function createMenu(config) {Object.assign({title: 'Foo',body: 'Bar',buttonText: 'Baz',cancellable: true }, config) // {} 目标对象,config 源对象
}
createMenu(menuConfig);

备注:

Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。简单来说,就是Object.assign()是对象的静态方法,可以用来复制对象的可枚举属性到目标对象,利用这个特性可以实现对象属性的合并。
 Object.assign(target, ...sources)参数: target--->目标对象source--->源对象返回值:target,即目标对象

函数参数“两个”以下最好

// 不好的
function createMenu(title, body, buttonText, cancellable) {// ...
}
// 好的
const menuConfig = {title: 'Foo',body: 'Bar',buttonText: 'Baz',cancellable: true
};
function createMenu(menuConfig){// ...
}

12.使用解释形语言

13.让对象拥有私有成员-通过闭包来实现

// 不好的
const Employee = function(name) {this.name = name;
};
Employee.prototype.getName = function getName() {return this.name;
};
const employee = new Employee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: undefined
// 好的
const Employee = function(name){this.getName = function(){return name}
}
const employee = new Employee('John Doe');
console.log(`Employee name: ${employee.getName()}`); // Employee name: John Doe
delete employee.name;
console.log(`Employee name: ${employee.getName()}`); // Employee name: undefined

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

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

相关文章

Debeizum 增量快照

在Debeizum1.6版本发布之后,成功推出了Incremental Snapshot(增量快照)的功能,同时取代了原有的实验性的Parallel Snapshot(并行快照)。在本篇博客中,我将介绍全新快照方式的原理,以…

HTML+CSS+JavaScript:实现B站评论发布效果

一、需求 1、用户输入内容,输入框左下角实时显示输入字数 2、为避免用户输入时在内容左右两端误按多余的空格,在发送评论时,检测用户输入的内容左右两端是否带有空格,若有空格,发布时自动取消左右两端的空格 3、若用…

浏览器的同源策略 - 跨域问题

1.什么是跨域 跨域问题的实质是浏览器的同源策略造成的。浏览器同源策略是浏览器为 JavaScript 施加的限制。简单点说就是非同源会出现如下等限制: 无法访问其他源下的网页的 Cookies,Storage等;无法访问其他源下的DOM对象和 JS 对象;无法使…

uni iOS 消息推送扩展:实现离线语音播报

文章目录 引言I 前期准备1.1 配置扩展1.2 测试报文II iOS Extension(扩展)2.1 插件作者配置2.2 插件使用者配置see also引言 HBuilderX3.1.5+版本uni原生插件支持iOS Extension(扩展)。 消息推送离线语音播报插件获取方式: 公z号:iOS逆向: 离线包x10, 源码是x15。 实…

java环境搭建 Ubuntu Linux

jdk的安装和配置环境变量 使用apt sudo apt install default-jdk若是安装成功了在终端输入java -version来查看是否安装成功 使用官网下载的jdk包 直接在百度上搜索jdk,选择图片这个 网址:jdk下载网址 若是arm就选择带有arm的,反之选择x64的&#…

[SQL挖掘机] - 窗口函数 - 聚合函数类

在 sql 中,sum、count、avg等函数是常见的聚合函数,它们用于计算结果集中某个列的总和、计数和平均值。而使用这些聚合函数作为窗口函数时,它们会对窗口内的行进行计算,并返回结果作为每一行的一个列。 下面是一些常用的聚合类窗…

vscode 通过mongoose 连接mongodb atlas

了解mongodb 的项目结构 1.代表集群名称 > 2.代表数据库名称>3.代表每个 collection名称 三者范围为从大到小的关系 (一对多)。每个集群有不同的连接地址、用户信息(Database Access)、ip配置信息(Network Acce…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验一 点亮第一个LED

目录 前言 一、原理图及知识点介绍 1.1、LED原理图 1.2、MCU51原理图 二、代码分析 知识点一:#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 知识点二:你知道sfr P0 0x80;是怎么来的呢为什么要赋值0x80&#xff…

Firewall,iptablesl放火墙的使用

Firewall放火墙的使用 1.查看当前防火墙运行状态: firewall-cmd --state systemctl start firewalld.service 开启防火墙 systemctl stop firewalld.service 关闭防火墙 systemctl disable firewalld.service 彻底关闭防火墙,开机不启动 systemctl ena…

C语言二维数组指针有关内容

定义一个a指针指向二维数组,则 表示形式含义a:表示二维数组名,即二维数组首地址a、a[0]、(a0):0行0列元素的地址a1、&a[1]:一行起始地址a[1]、*(a1):1行0列元素的地址a[1]2、*(a1)2、&a[1][2]:1行2列元素的地…

vxworks文件系统分析

参考https://www.freebuf.com/articles/endpoint/335030.html 测试固件 https://service.tp-link.com.cn/detail_download_7989.html 固件提取 binwalk解压固件,在第一部分即为要分析的二进制文件,可以拖进ida分析 设置为arm小端字节序,点…

数组中出现次数超过一半的数字——剑指 Offer 39

文章目录 题目描述法一 哈希表法二 摩尔投票 题目描述 法一 哈希表 使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。 class Solution { public:int maj…

Web与HTTP

目录 DNS与域名 DNS解析的方式 过程 注册域名 html 名词解释 html的语法 web web2.0 静态页面特点 动态页面 动态页面特点 http协议 工作流程 http的请求方式 get post 状态码 常用状态码 通信套接字 套接字调用的端口 DNS与域名 网络是基于tcp/ip协议进…

java中的字符流

使用字节流读取中文的时候,如果使用的编码是GBK,则占用2个字节;如果使用UTF-8编码,则占用3个字节,意味着我们读取中文文档的时候如果每次读取1个字节,那么输出的将会是乱码,因为是不完整的中文。…

面试攻略,Java 基础面试 100 问(六)

JAVA 泛型 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本 质是参数化类型,也就是说所操作的数据类型被指定为一个参数。比如我们要写一个排序方法, 能够对整型数组、字符串数组甚至其他任何类型的…

nohup Java -jar 生成的nohup.out 文件一直增加,如何处理

目录 1 实现 1 实现 除了使用echo "" > filename清空文件内容之外,还有其他几种方法可以删除文件中的内容而不删除文件本身:使用truncate命令:truncate命令可以用来截断文件并清空内容。使用以下命令清空文件内容:t…

程序的编译和调试

gcc编译器 gcc(GNU Compiler Collection)是GNU推出的多平台编译器,可将C、C源程序编译连接成可执行文件,支持以下后缀: .c c语言源代码 .h 程序所包含的头文件 .i 已经预处理过的C源代码文件 .s 汇编语言源代码文件 .o 编译后的目标文件…

解决SVN或GIT忽略提交文件的问题

背景 使用IDEA 的SVN插件提交文件是总是会提交一些不需要提交的文件; 我们可以通过一些简单设置忽略这些文件。 git 在项目根目录新建文本文件,修改后缀为.gitignore 文件中添加内容 *.iml .project .gradle/ .idea/ target/ build/ .vscode/ .settings/ .facto…

冒泡排序(c++题解)

题目描述 将读入的 N 个数从小到大排序后输出。 输入格式 第一行为一个正整数 NN。 第二行包含 N 个空格隔开的正整数 ai​,为你需要进行排序的数。 输出格式 将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。 输入输出…

Elasticsearch:语义搜索 - Semantic Search in python

当 OpenAI 于 2022 年 11 月发布 ChatGPT 时,引发了人们对人工智能和机器学习的新一波兴趣。 尽管必要的技术创新已经出现了近十年,而且基本原理的历史甚至更早,但这种巨大的转变引发了各种发展的“寒武纪大爆炸”,特别是在大型语…