20个JS技巧,助你提升工作效率,再也不做加班人!

本篇文章给大家分享20 个提高代码效率的 javascript 技巧和窍门,做一个不加班的前端人,希望对大家有所帮助。

20个JS技巧,助你提升工作效率,再也不做加班人!

在我们的日常任务中,我们会编写诸如排序、搜索、查找唯一值、传递参数、交换值等功能,所以在这里我列出了我的速记技巧列表!

JavaScript 真的是一门很棒的语言,值得学习和使用。对于给定的问题,可以有不止一种方法来达到相同的解决方案。在本文中,我们将只讨论最快的。

这些方法肯定会帮助您:

减少 LOC(代码行数)的数量,编码比赛,黑客马拉松或其他限时任务。

大多数这些 JavaScript Hacks 使用 ECMAScript6(ES2015) 以后的技术,尽管最新版本是 ECMAScript11(ES2020)。

==注意==:以下所有技巧都已在 Google Chrome 的控制台上进行了测试。

1. 声明和初始化数组

我们可以使用默认值(如””、null或 )初始化特定大小的数组0。您可能已经将这些用于一维数组,但如何初始化二维数组/矩阵呢?

const array = Array(5).fill(''); // 输出(5) ["", "", "", "", ""]const matrix = Array(5).fill(0).map(()=>Array(5).fill(0)); // 输出(5) [Array(5), Array(5), Array(5), Array(5), Array(5)]0: (5) [0, 0, 0, 0, 0]1: (5) [0, 0, 0, 0, 0]2: (5) [0, 0, 0, 0, 0]3: (5) [0, 0, 0, 0, 0]4: (5) [0, 0, 0, 0, 0]length: 5

2. 找出总和、最小值和最大值

我们应该利用reduce方法来快速找到基本的数学运算。

const array  = [5,4,7,8,9,2];

array.reduce((a,b) => a+b);// 输出: 35

最大限度

array.reduce((a,b) => a>b?a:b);// 输出: 9

最小

array.reduce((a,b) => a<b?a:b);// 输出: 2

3. 对字符串、数字或对象数组进行排序

我们有内置的方法sort()reverse()用于对字符串进行排序,但是数字或对象数组呢?

让我们看看数字和对象的升序和降序排序技巧。

排序字符串数组

const stringArr = ["Joe", "Kapil", "Steve", "Musk"]stringArr.sort();// 输出(4) ["Joe", "Kapil", "Musk", "Steve"]stringArr.reverse();// 输出(4) ["Steve", "Musk", "Kapil", "Joe"]

排序数字数组

const array  = [40, 100, 1, 5, 25, 10];array.sort((a,b) => a-b);// 输出(6) [1, 5, 10, 25, 40, 100]array.sort((a,b) => b-a);// 输出(6) [100, 40, 25, 10, 5, 1]

对象数组排序

const objectArr = [     { first_name: 'Lazslo', last_name: 'Jamf'     },     { first_name: 'Pig',    last_name: 'Bodine'   },         { first_name: 'Pirate', last_name: 'Prentice' }];objectArr.sort((a, b) => a.last_name.localeCompare(b.last_name));// 输出(3) [{…}, {…}, {…}]0: {first_name: "Pig", last_name: "Bodine"}1: {first_name: "Lazslo", last_name: "Jamf"}2: {first_name: "Pirate", last_name: "Prentice"}length: 3

4. 从数组中过滤出虚假值

Falsy值喜欢0undefinednullfalse""''可以很容易地通过以下方法省略

const array = [3, 0, 6, 7, '', false];array.filter(Boolean);// 输出(3) [3, 6, 7]

5. 对各种条件使用逻辑运算符

如果你想减少嵌套 if…else 或 switch case,你可以简单地使用基本的逻辑运算符AND/OR

function doSomething(arg1){     arg1 = arg1 || 10; // 如果尚未设置,则将 arg1 设置为 10 作为默认值return arg1;}let foo = 10;  foo === 10 && doSomething(); // is the same thing as if (foo == 10) then doSomething();// 输出: 10foo === 5 || doSomething();// is the same thing as if (foo != 5) then doSomething();// 输出: 10

6. 删除重复值

您可能已经将 indexOf() 与 for 循环一起使用,该循环返回第一个找到的索引或较新的 includes() 从数组中返回布尔值 true/false 以找出/删除重复项。 这是我们有两种更快的方法。

const array  = [5,4,7,8,9,2,7,5];array.filter((item,idx,arr) => arr.indexOf(item) === idx);// orconst nonUnique = [...new Set(array)];// 输出: [5, 4, 7, 8, 9, 2]

7. 创建计数器对象或映射

大多数情况下,需要通过创建计数器对象或映射来解决问题,该对象或映射将变量作为键进行跟踪,并将其频率/出现次数作为值进行跟踪。

let string = 'kapilalipak';const table={}; for(let char of string) {  table[char]=table[char]+1 || 1;}// 输出{k: 2, a: 3, p: 2, i: 2, l: 2}

AiTxt 文案助手 AiTxt 文案助手

AiTxt 利用 Ai 帮助你生成您想要的一切文案,提升你的工作效率。

AiTxt 文案助手 15 查看详情 AiTxt 文案助手

const countMap = new Map();  for (let i = 0; i  2, "a" => 3, "p" => 2, "i" => 2, "l" => 2}

8. 三元运算符很酷

您可以避免使用三元运算符嵌套条件 if…elseif…elseif。

function Fever(temp) {    return temp > 97 ? 'Visit Doctor!'      : temp < 97 ? 'Go Out and Play!!'      : temp === 97 ? 'Take Some Rest!';}// 输出Fever(97): "Take Some Rest!" Fever(100): "Visit Doctor!"

9. 与旧版相比,for 循环更快

forfor..in默认为您提供索引,但您可以使用 arr[index]。for..in 也接受非数字,所以避免它。forEach,for...of直接获取元素。forEach也可以为您提供索引,但for...of不能。forfor...of考虑阵列中的孔,但其他 2 个不考虑。

10.合并2个对象

通常我们需要在日常任务中合并多个对象。

const user = {  name: 'Kapil Raghuwanshi',  gender: 'Male'  };const college = {  primary: 'Mani Primary School',  secondary: 'Lass Secondary School'  };const skills = {  programming: 'Extreme',  swimming: 'Average',  sleeping: 'Pro'  };const summary = {...user, ...college, ...skills};// 输出gender: "Male"name: "Kapil Raghuwanshi"primary: "Mani Primary School"programming: "Extreme"secondary: "Lass Secondary School"sleeping: "Pro"swimming: "Average"

11. 箭头函数

箭头函数表达式是传统函数表达式的紧凑替代品,但有局限性,不能在所有情况下使用。由于它们具有词法范围(父范围)并且没有自己的范围thisarguments因此它们指的是定义它们的环境。

const person = {name: 'Kapil',sayName() {    return this.name;    }}person.sayName();// 输出"Kapil"

const person = {name: 'Kapil',sayName : () => {    return this.name;    }}person.sayName();// 输出""

12. 可选链

可选的链接 ?.如果值在 ? 之前,则停止评估。为 undefined 或 null 并返回

undefined。const user = {  employee: {    name: "Kapil"  }};user.employee?.name;// 输出: "Kapil"user.employ?.name;// 输出: undefineduser.employ.name// 输出: VM21616:1 Uncaught TypeError: Cannot read property 'name' of undefined

13. 打乱数组

利用内置Math.random()方法。

const list = [1, 2, 3, 4, 5, 6, 7, 8, 9];list.sort(() => {    return Math.random() - 0.5;});// 输出(9) [2, 5, 1, 6, 9, 8, 4, 3, 7]// Call it again(9) [4, 1, 7, 5, 3, 8, 2, 9, 6]

14. 空合并算子

空合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为空或未定义时返回其右侧操作数,否则返回其左侧操作数。

const foo = null ?? 'my school';// 输出: "my school"const baz = 0 ?? 42;// 输出: 0

15. Rest & Spread 运算符

那些神秘的3点...可以休息或传播!?

function myFun(a,  b, ...manyMoreArgs) {   return arguments.length;}myFun("one", "two", "three", "four", "five", "six");// 输出: 6

const parts = ['shoulders', 'knees']; const lyrics = ['head', ...parts, 'and', 'toes']; lyrics;// 输出: (5) ["head", "shoulders", "knees", "and", "toes"]

16. 默认参数

const search = (arr, low=0,high=arr.length-1) => {    return high;}search([1,2,3,4,5]);// 输出: 4

17. 将十进制转换为二进制或十六进制

在解决问题的同时,我们可以使用一些内置的方法,例如.toPrecision().toFixed()来实现许多帮助功能。

const num = 10;num.toString(2);// 输出: "1010"num.toString(16);// 输出: "a"num.toString(8);// 输出: "12"

18. 使用解构简单交换两值

let a = 5;let b = 8;[a,b] = [b,a][a,b]// 输出(2) [8, 5]

19. 单行回文检查

嗯,这不是一个整体的速记技巧,但它会让你清楚地了解如何使用弦乐。

function checkPalindrome(str) {  return str == str.split('').reverse().join('');}checkPalindrome('naman');// 输出: true

20.将Object属性转成属性数组

使用Object.entries(),Object.keys()和Object.values()const obj = { a: 1, b: 2, c: 3 };Object.entries(obj);// 输出(3) [Array(2), Array(2), Array(2)]0: (2) ["a", 1]1: (2) ["b", 2]2: (2) ["c", 3]length: 3Object.keys(obj);(3) ["a", "b", "c"]Object.values(obj);(3) [1, 2, 3]

【相关推荐:javascript视频教程、web前端】

以上就是20个JS技巧,助你提升工作效率,再也不做加班人!的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/549006.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 19:10:00
下一篇 2025年11月9日 19:14:45

相关推荐

  • Go语言中模拟JavaScript短路求值实现多选项变量赋值

    本文探讨了如何在go语言中实现类似javascript的短路求值(`||`操作符)来从多个选项中赋值变量。go语言强调类型安全,不直接支持非布尔类型的“真值”判断,也无三元运算符。教程将展示使用`if/else if/else`结构进行条件赋值的标准go语言实践,并强调其清晰性和类型安全的重要性。 …

    2025年12月16日
    000
  • 深入理解Go encoding/xml中omitempty与指针的反序列化行为

    本文旨在阐明go语言`encoding/xml`包中`omitempty`标签在处理指针类型时的反序列化(unmarshal)行为。许多开发者误以为`omitempty`能阻止空xml元素初始化指针字段,但实际上它仅影响序列化(marshal)。我们将通过具体示例,解析为何在空xml元素(如&#82…

    2025年12月16日
    000
  • 如何在Golang中实现任务列表拖拽功能

    Golang不直接实现拖拽,而是通过API支持前端拖拽功能。前端使用HTML5或SortableJS实现任务项拖动,用户调整顺序后,JavaScript将新顺序(如[2, 1])通过POST请求发送至Golang后端。后端定义/api/reorder接口,接收包含任务ID数组的JSON数据,遍历并更…

    2025年12月16日
    000
  • 如何在Golang中开发小型CRM系统

    先定义客户结构体并实现REST API,再通过net/http搭建路由,结合SQLite完成增删改查。1. 设计Customer结构体包含ID、Name、Email等字段;2. 使用net/http创建GET/POST/PUT/DELETE路由处理请求;3. 用database/sql和mattn/…

    2025年12月16日
    000
  • Revel框架静态文件加载异常排查与解决

    本教程旨在解决revel框架中静态文件(如图片、%ignore_a_1%、js)加载异常的问题,例如显示旧版本或截断文件。核心原因常与`gopath`配置不当、开发环境与`gopath`不一致,或`gopath`内存在重复文件有关。文章将提供详细的诊断步骤,包括检查`gopath`、排查文件副本,并…

    2025年12月16日
    000
  • 解决Revel框架静态文件加载异常:GOPATH与文件路径排查指南

    本文旨在解决revel框架中静态文件加载异常,如文件版本过旧或内容不完整的问题。核心内容包括诊断gopath配置不当、文件路径冲突等常见原因,并提供使用`strace`等工具进行精确排查的方法,确保revel正确地加载和提供静态资源。 在Revel框架开发过程中,开发者有时会遇到静态文件(如CSS、…

    2025年12月16日
    000
  • Golang如何实现错误返回链式调用

    Go中实现错误返回的链式调用需每个方法返回*结构体,error,通过检查err决定是否继续执行。例如ConfigBuilder的SetHost、SetPort方法在出错时设置err并跳过后续操作,最终Build返回首个错误;更灵活的方式是使用函数式选项模式,如RunSteps接受多个返回error的…

    2025年12月16日
    000
  • 如何在Golang中实现条件表达式简写

    Go无三元操作符,但可用IIFE、map索引或泛型函数模拟:1. IIFE用于条件赋值;2. map[bool]T实现状态选择;3. 泛型Ternary函数提升复用性,按场景选最佳方案。 在Golang中,没有像其他语言(如Python的 x if condition else y 或 JavaSc…

    2025年12月16日
    000
  • Go语言中多选项变量声明的实现与类型安全考量

    本文探讨了在go语言中如何实现类似javascript的短路逻辑赋值模式(`var foo = a || b || c;`)。go语言作为一门强类型语言,不支持字符串的“真值”判断,也缺乏三元运算符。因此,需要通过显式的`if/else if/else`结构来安全地选择第一个非空或有效的值,强调go…

    2025年12月16日
    000
  • Go语言中条件式变量赋值的最佳实践

    本文探讨了如何在go语言中实现类似于javascript中利用逻辑或运算符进行条件式变量赋值的模式。go语言由于其强类型特性和缺乏非布尔类型的“真值/假值”概念,以及没有三元运算符,需要采用更显式的方法,即通过`if/else if/else`结构来安全、清晰地完成变量的条件式赋值。 在JavaSc…

    2025年12月16日
    000
  • Go语言中实现多选项变量赋值的惯用方法

    本文探讨如何在go语言中实现类似javascript `var foo = a || b || c;` 的多选项变量赋值逻辑。go语言强调类型安全,不支持字符串等非布尔类型的“真值”判断,也未提供三元运算符。因此,应采用清晰的`if-else if-else`结构进行显式条件判断,确保代码的可读性和…

    2025年12月16日
    000
  • 解决Revel框架静态文件加载异常:GOPATH与文件路径疑难解析

    本教程旨在解决revel框架中静态文件加载异常(如显示旧版本或不完整文件)的问题。核心原因常与`gopath`配置不当或文件路径解析错误有关。文章将提供详细的排查步骤,包括`gopath`一致性检查、文件副本识别以及利用系统工具追踪文件访问路径,并强调在`gopath`内进行revel应用开发的最佳…

    2025年12月16日
    000
  • Go语言中从多个选项声明变量的惯用方法

    本文探讨了go语言中如何实现类似javascript的从多个备选值中声明变量的模式。go语言强调类型安全和代码显式性,不支持javascript中字符串的“真值”概念,也没有三元运算符。因此,在go中,应使用清晰的`if-else if-else`结构来检查变量的有效性并进行赋值,以确保代码的健壮性…

    2025年12月16日
    000
  • Go语言包函数导出机制:通过命名约定实现可见性控制

    go语言的包函数导出机制简洁而独特,它并非依赖于特定的关键字或模块对象,而是通过标识符的首字母大小写来控制。当函数名以大写字母开头时,该函数将从包中导出,可在包外部被访问;而以小写字母开头的函数则仅限于包内部使用。这一设计原则同样适用于变量、类型和结构体字段。 在Go语言中,对于初次接触的开发者,尤…

    2025年12月16日
    000
  • Go Gorilla Sessions:会话管理与变量设置实践指南

    本文详细介绍了如何在go语言的gorilla web框架中使用`gorilla/sessions`包进行会话管理。内容涵盖了会话存储的初始化、会话的获取与创建、会话变量的设置与读取,以及关键的会话保存操作,并提供了完整的代码示例和重要注意事项,旨在帮助开发者高效、安全地实现基于cookie的会话机制…

    2025年12月16日
    000
  • Go Web服务器中Goroutine误用:文件服务空白页的根源与高效优化实践

    本文深入剖析了在go web服务器中,将文件加载函数作为goroutine调用导致响应空白页的常见问题。核心原因在于http处理器在goroutine完成写入前过早返回,导致空响应被发送。文章详细解释了go http请求处理机制,揭示了`ioutil.readfile`的性能瓶颈,并提供了基于`os…

    2025年12月16日
    000
  • 深入理解Go HTTP服务器与Goroutine:避免常见陷阱与优化文件服务

    在go http服务器中,直接将页面加载逻辑封装为goroutine可能导致空白响应,因为http处理器期望同步完成请求。本文将深入探讨go http处理器的生命周期,解释为何不当使用goroutine会中断响应流,并提供使用`os.open`与`io.copy`优化文件流式传输的方法,同时推荐`h…

    2025年12月16日
    000
  • Go Gorilla 框架会话管理:深度解析与实践指南

    本文旨在提供一份关于如何在 go 语言中使用 gorilla sessions 框架进行会话管理的全面教程。我们将详细探讨会话存储的初始化、会话的获取与设置、关键的 cookie 选项配置,以及确保会话数据正确保存到客户端浏览器的核心步骤,帮助开发者高效、安全地实现用户会话功能。 正文 1. 引言 …

    2025年12月16日
    000
  • Go Gorilla Sessions:深入理解与实践会话管理

    本教程详细讲解了如何在go语言中使用gorilla sessions框架进行会话管理。内容涵盖cookiestore的初始化、会话的获取与创建、会话值的设置与持久化,以及会话选项的配置,旨在帮助开发者构建安全、可靠的web应用会话机制。 1. 引言:Go Gorilla Sessions 简介 在W…

    2025年12月16日
    000
  • 自定义日志处理与用户行为分析:从文件系统到专业工具的最佳实践

    本教程探讨了自定义日志格式的解析、存储与分析策略。针对用户行为日志,文章指出传统文件系统存储的局限性,并推荐转向事件驱动的专业分析平台,如Mixpanel或Keen.io,以实现高效数据洞察与可视化。同时,也讨论了Unix工具、编程语言在日志解析中的应用场景,强调了可视化在理解数据中的核心作用。 在…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信