19个常用的JavaScript简化编码优化小技巧

【两行代码——最简单装X 哈哈哈】附:关于Windows 文件资源结构,计算机科班的我们需要了解什么?| 网络工程师面试题:什么是网络隔离?有哪些常见的网络隔离技术和策略? 上“代码”!!! color a tree d: 文件后缀名 .bat 即可。 保存双击打开: 效果:网络工程师面试题:什么是网络隔离?有哪些常见的网络隔离技术和策略? 阅读详情

对于任何基于javascript的开发人员来说,这都是必须阅读的。我已经把这篇文章作为学习速记JavaScript编码技术的一个重要参考资料,这些技巧是我多年来所掌握的。为了帮助您理解正在发生的事情,我已经包含了一些长时间版本,以便提供一些编码的视角。

1.三元操作符

当想写if…else语句时,使用三元操作符来代替。

const x = 20;
let answer;
if (x > 10) {
    answer = 'is greater';
} else {
    answer = 'is lesser';
}

简写:

const answer = x > 10 ? 'is greater' : 'is lesser';

也可以嵌套if语句:

const big = x > 10 ? " greater 10" : x

2.短路求值简写方式

当给一个变量分配另一个值时,想确定源始值不是null,undefined或空值。可以写撰写一个多重条件的if语句。

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

或者可以使用短路求值方法:

const variable2 = variable1  || 'new';

3.声明变量简写方法

let x;
let y;
let z = 3;

简写方法:

let x, y, z=3;

4.if存在条件简写方法

if (likeJavaScript === true)

简写:

if (likeJavaScript)

只有likeJavaScript是真值时,二者语句才相等

如果判断值不是真值,则可以这样:

let a;
if ( a !== true ) {
// do something...
}

简写:

let a;
if ( !a ) {
// do something...
}

5.JavaScript循环简写方法

for (let i = 0; i < allImgs.length; i++)

简写:

for (let index in allImgs)

也可以使用Array.forEach:

function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}
[2, 5, 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9

6.短路评价

给一个变量分配的值是通过判断其值是否为null或undefined,则可以:

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}

简写:

const dbHost = process.env.DB_HOST || 'localhost';

7.十进制指数

当需要写数字带有很多零时(如10000000),可以采用指数(1e7)来代替这个数字:

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;

8.对象属性简写

如果属性名与key名相同,则可以采用ES6的方法:

const obj = { x:x, y:y };

简写:

const obj = { x, y };

9.箭头函数简写

传统函数编写方法很容易让人理解和编写,但是当嵌套在另一个函数中,则这些优势就荡然无存。

function sayHello(name) {
  console.log('Hello', name);
}

setTimeout(function() {
  console.log('Loaded')
}, 2000);

list.forEach(function(item) {
  console.log(item);
});

简写:

sayHello = name => console.log('Hello', name);

setTimeout(() => console.log('Loaded'), 2000);

list.forEach(item => console.log(item));

10.隐式返回值简写

经常使用return语句来返回函数最终结果,一个单独语句的箭头函数能隐式返回其值(函数必须省略{}为了省略return关键字)
为返回多行语句(例如对象字面表达式),则需要使用()包围函数体。

function calcCircumference(diameter) {
  return Math.PI * diameter
}

var func = function func() {
  return { foo: 1 };
};

简写:

calcCircumference = diameter => (
  Math.PI * diameter;
)

var func = () => ({ foo: 1 });

11.默认参数值

为了给函数中参数传递默认值,通常使用if语句来编写,但是使用ES6定义默认值,则会很简洁:

function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}

简写:

volume = (l, w = 3, h = 4 ) => (l * w * h);

volume(2) //output: 24

12.模板字符串

传统的JavaScript语言,输出模板通常是这样写的。

const welcome = 'You have logged in as ' + first + ' ' + last + '.'

const db = 'http://' + host + ':' + port + '/' + database;

ES6可以使用反引号和${}简写:

const welcome = `You have logged in as ${first} ${last}`;

const db = `http://${host}:${port}/${database}`;

13.解构赋值简写方法

在web框架中,经常需要从组件和API之间来回传递数组或对象字面形式的数据,然后需要解构它

const observable = require('mobx/observable');
const action = require('mobx/action');
const runInAction = require('mobx/runInAction');

const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;

简写:

import { observable, action, runInAction } from 'mobx';

const { store, form, loading, errors, entity } = this.props;

也可以分配变量名:

const { store, form, loading, errors, entity:contact } = this.props;
//最后一个变量名为contact

14.多行字符串简写

需要输出多行字符串,需要使用+来拼接:

const lorem = 'Lorem ipsum dolor sit amet, consectetur\n\t'
    + 'adipisicing elit, sed do eiusmod tempor incididunt\n\t'
    + 'ut labore et dolore magna aliqua. Ut enim ad minim\n\t'
    + 'veniam, quis nostrud exercitation ullamco laboris\n\t'
    + 'nisi ut aliquip ex ea commodo consequat. Duis aute\n\t'
    + 'irure dolor in reprehenderit in voluptate velit esse.\n\t'

使用反引号,则可以达到简写作用:

const lorem = `Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor incididunt
    ut labore et dolore magna aliqua. Ut enim ad minim
    veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute
    irure dolor in reprehenderit in voluptate velit esse.`

15.扩展运算符简写

扩展运算符有几种用例让JavaScript代码更加有效使用,可以用来代替某个数组函数。

// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice()

简写:

// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];

不像concat()函数,可以使用扩展运算符来在一个数组中任意处插入另一个数组。

const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];

也可以使用扩展运算符解构:

const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }

16.强制参数简写

JavaScript中如果没有向函数参数传递值,则参数为undefined。为了增强参数赋值,可以使用if语句来抛出异常,或使用强制参数简写方法。

function foo(bar) {
  if(bar === undefined) {
    throw new Error('Missing parameter!');
  }
  return bar;
}

简写:

mandatory = () => {
  throw new Error('Missing parameter!');
}

foo = (bar = mandatory()) => {
  return bar;
}

17.Array.find简写

想从数组中查找某个值,则需要循环。在ES6中,find()函数能实现同样效果。

const pets = [
  { type: 'Dog', name: 'Max'},
  { type: 'Cat', name: 'Karl'},
  { type: 'Dog', name: 'Tommy'},
]
function findDog(name) {
  for(let i = 0; i<pets.length; ++i) {
    if(pets[i].type === 'Dog' && pets[i].name === name) {
      return pets[i];
    }
  }
}

简写:

pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

18.Object[key]简写

考虑一个验证函数

function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}
console.log(validate({first:'Bruce',last:'Wayne'})); // true

假设当需要不同域和规则来验证,能否编写一个通用函数在运行时确认?

// 对象验证规则
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}
// 通用验证函数
const validate = (schema, values) => {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}
console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true

现在可以有适用于各种情况的验证函数,不需要为了每个而编写自定义验证函数了
19.双重非位运算简写

有一个有效用例用于双重非运算操作符。可以用来代替Math.floor(),其优势在于运行更快,可以阅读此文章了解更多位运算。

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

简写

~~4.9 === 4  //true

译文地址:https://juejin.im/post/5948db9661ff4b006c061b2b
原文地址:https://www.sitepoint.com/shorthand-javascript-techniques/

【SpringBoot 3.x 第59节】React 19 + Next.js 15 时代,你还在用老一套写全栈应用吗?是时候彻底升级你的开发思维了! 🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章 阅读详情

相关推荐

用AG9311芯片DIY一个多功能Type-C扩展坞:从原理图到PCB布局的保姆级指南

本文详细介绍了如何利用AG9311芯片DIY多功能Type-C扩展坞,涵盖从原理图设计到PCB布局的全过程。AG9311芯片作为高性价比的Type-C控制器,支持HDMI 2.0、USB 3.0、PD快充和千兆网口,适合硬件爱好者打造个性化扩展坞。文章还提供了调试技巧和进阶优化建议,帮助读者轻松完成项目。

weixin_42520909的博客 404

js中的if条件的简写总结

判断对象是否存在,if(obj) 相当于 if(obj!==undefined && obj!==null) 的简写

qq_21379779的博客 5497

K230开发板实战:YOLOv8n模型部署全流程(附常见报错解决方案)

本文详细介绍了在K230开发板上部署YOLOv8n模型的完整流程,包括模型选型、配置文件优化和运行时调优。特别针对常见的'生成部署文件异常'等问题提供了实用解决方案,帮助开发者高效完成嵌入式AI模型的部署与优化。

g8f9d0s1a2的博客 1048

最神奇的装X指令,装X代码,超全面,共24条

最神奇的装X指令,装X代码,超全面,共24条

yaosichengalpha的博客 4817

Knewton自适应学习平台实战:如何用大数据打造个性化教育体验

本文深入解析Knewton自适应学习平台如何利用大数据技术构建个性化教育体验。通过多维度数据采集、动态认知诊断模型和智能推荐系统,平台能精准识别学生知识盲区,提供定制化学习路径。实战案例显示,该方案显著提升完课率并优化学习效率,展现了自适应学习技术的教育变革潜力。

info6的博客 505

Krylov子空间与Arnoldi过程

一、应用背景 Krylov子空间方法是模型降阶(MOR)的一种,Krylov 子空间方法就是在Krylov子空间中寻找近似解。 二、Krylov子空间 n是原始矩阵的维度,m为降阶后矩阵的维度,通常m<<n。 三、Arnoldi 过程: 计算Km 的一组正交 对应上述MGS过程的python代码: import numpy as np def arnoldi_itera...

保持写作习惯,完成知识沉淀 6001

Python×cmd:教你装X

教你装X 大家好,我是小赵,今天我来教大家用程序装X 方法1 这个方法很简单,只需要windows徽标键+r打开cmd(命令提示符)然后输入 color 0a 回车,接着输入 dir/s 就像这样 然后回车,就会 最后 就完成了,这样不仅能装X,隔壁王二来修电脑也会被惊掉下巴,这样之后关机重启能解决90%的问题 方法2 首先公布代码 不要解析自己去抄得了 代码解析 第一部分 主人。。。部分 1 print('欢迎回归,主人')#计算机的问候 2...

xiaozhao_666的博客 1万+

EMB电子机械制动系统和EHB电子液压制动系统控制功能的对比

EMB电子机械制动系统相比EHB液压制动系统具有显著优势:响应速度更快(<100ms)、控制精度更高(±2N·m)、能实现单轮独立控制,支持0.1%级制动力调节。在ABS、ESC等安全功能上表现更优,制动平顺性和NVH性能更好,同时提升能量回收效率15%-20%。特别适合智能驾驶需求,可使AEB等系统响应时间缩短50ms,紧急制动距离减少1米以上。EMB系统完美契合高阶自动驾驶对快速响应和精准控制的要求。

m0_59012156的博客 885

Js的函数简写形式

这两种语法形式在功能上是等价的,都可以用来定义函数。箭头函数具有更简洁的语法和特定的上下文绑定行为,而普通函数定义方式则是传统的JavaScript函数定义形式。:这是ES6中的箭头函数(Arrow Function)的语法。箭头函数是一种简洁的函数表达式形式,可以更方便地定义函数。需要注意的是,箭头函数和普通函数在某些情况下具有不同的行为,特别是在处理函数上下文(都表示定义一个函数,但它们在语法上有细微的区别。:这是ES5及之前的函数定义的语法形式。是一个箭头函数,函数体写在花括号。

chen的博客 786

Unity内存优化:从崩溃到流畅的终极指南

Emscripten 为 WebAssembly 设定的内存布局(Static、Stack 和 Heap)为开发者提供了一个清晰的内存管理框架。理解这些内存区域的特性和用途,有助于开发者在 WebGL 项目中更有效地管理内存,优化性能,减少内存使用峰值。在 Unity WebGL 中,Dynamic Memory 是 UnityHeap 的主要组成部分,负责存储游戏运行时所需的各种数据。Dynamic Memory 主要分为两类:Managed Memory 和 Native Memory。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 358

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1085

javascript 编码_19种以上JAVASCRIPT简化编码技术

javascript 编码 只是让您知道,JAVASCRIPT简化编码技术职位中现在有19个。 请享用! :) 学习JavaScript速记技术 翻译自: https://www.sitepoint.com/19-javascript-shorthand-coding-techniques/javascript 编码 ...

135

河洛理数【陈抟】先天命卦大运

首先我们把前文提及的天干和地支进行上下划分,那么每一年的年份都是使用一天干和一地支进行组合,即如上的甲子、癸亥,那么下一年就是天干和地支都进行顺延一位进行组合,如甲子年下一年就是乙丑年,但是由于天干是十个、地支有十二个,所以要遍历一遍的话,就正好是 60 年。1924 年 ~ 1983 年(中元) 1984 年 ~ 2043 年(下元) 2044 年 ~ 2103 年(上元)2、找到卦中第一个(从下往上,也就是初爻、二到五爻、上爻)对应时辰的阴阳爻。5、也就是所属的元堂爻。

Daniel专栏 2071

19+ JAVASCRIPT简化编码技术

只是为了让你知道,现在19有在JavaScript速记编码技术发布。 请享用! :) 学习JavaScript速记技巧 From: https://www.sitepoint.com//19-javascript-shorthand-coding-techniques/...

134

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

有意思的js编码小技巧

1.取整,位运算更快 Math.floor(4.9) === 4 //true ~~4.9 === 4 //true 2.三元运算符 ? : 还用于简化函数的调用。 function x() { console.log('x') }; function y() { console.log('y') }; let z = 3; 简化前: if (z == 3) { x(); } else { y(); } 简化后: (z==3?x:y)(); //x 3.

qq_41184533的博客 250

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

html css js 编码规范

目录 一、HTML编码规范 1. img标签要写alt属性 2. 单标签不要写闭合标签 3. 自定义属性要以data-开头 4. td要在tr里面,li要在ul/ol里面 5. ul/ol的直接子元素只能是li 6. section里面要有标题标签 7. 使用section标签增强SEO 8. 行内元素里面不可使用块级元素 9. 每个页面要写 10. 要用table布局写邮件...

whatday的专栏 992

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

React 19 新特性集合

react 19新特性介绍

CamilleZJ的博客 2843

base65536实战指南:在JavaScript项目中轻松集成编码功能

base65536是一种专为UTF-32编码文本优化的二进制编码方式,作为Unicode环境下Base64的理想替代方案,它能以更高效率在文本系统中传输二进制数据。本文将详细介绍如何在JavaScript项目中快速集成base65536编码功能,帮助开发者解决二进制数据在文本环境中的传输难题。 ## 为什么选择base65536? 在现代Web开发中,我们经常需要在文本协议中传输二进制数据。传

gitblog_01120的博客 1107

完整React 19开发者课程(含Next.js 16)

每个模块均配套实战项目,具体包括:剑桥租房房产应用(组件化开发)、购物车迷你项目(事件处理)、待办清单管理器(CRUD与本地存储)、英国驾照考试应用(useReducer状态管理)、明暗主题作品集网站(Context API)、翻牌匹配游戏(useRef与DOM操作)、天气应用(API请求与useEffect)、故事收集平台(路由与Supabase集成)、Trello式看板工具(拖拽功能与全局状态)等。9. 掌握React渲染周期(触发、重渲染、批处理、提交阶段);

jianqimingtian的博客 508

【亲测免费】 推荐使用:Node.js v12.19.0 —— 特别适配Hexo的稳定之选

推荐使用:Node.js v12.19.0 —— 特别适配Hexo的稳定之选 去发现同类优质开源项目:https://gitcode.com/ 在前端开发的浩瀚宇宙中,Node.js作为一颗璀璨的星,以其独特的非阻塞I/O和事件驱动特性照亮了无数开发者的心路。本文特别向大家推荐一个针对特定场景优化的Node.js版本——Node.js v12.19.0 64位安装包,它不仅免费,而且专为解决Hex...

gitblog_09792的博客 1211

ArcGIS Maps SDK for JavaScript 4.19资源文件介绍:集成强大地图功能

ArcGIS Maps SDK for JavaScript 4.19资源文件介绍:集成强大地图功能 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今互联网技术飞速发展的时代,地图服务已成为许多Web应用程序不可或缺的一部分。ArcGIS Maps SDK for JavaScript 4.19资源文件下载仓库,正是为了满足开发者对高效、强大的地图集成工具的需求而...

gitblog_06758的博客 263

Protocol Buffers for Node.js 最佳性能配置:20个优化建议

Protocol Buffers for Node.js 是一个高效的二进制序列化库,专门为Node.js环境优化,提供比JSON更快的编码解码速度和更小的数据体积。本文将分享20个实用的性能优化建议,帮助您充分发挥Protocol Buffers在Node.js应用中的性能潜力。 ## 🚀 1. 预编译模式:告别运行时解析 使用预编译模式可以显著提升启动性能。通过CLI工具将.proto文

gitblog_01133的博客 1038

js 出现 奇怪的错误时,可看看js文件编码是否为UTF-8

js 出现 奇怪的错误时,可将js文件编码是否为UTF-8. 例:在IE7-8都可以,在IE6就不可以了。(把中文注释去掉还是不行)。   把JS代码放页面上又,可以了。 转载于:https://www.cnblogs.com/chencidi/archive/2010/07/19/1780674.html...

263

ArcGIS Maps SDK for JavaScript 4.19 资源文件介绍

ArcGIS Maps SDK for JavaScript 4.19 资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 欢迎来到 ArcGIS Maps SDK for JavaScript 4.19 的资源文件下载仓库! 这里提供的是 ArcGIS Maps SDK for JavaScript 4.19 版本的资源文件。ArcGIS Maps SDK for J...

gitblog_06747的博客 328

React19 新特性 – 附带代码示例的更新

🤖 React 编译器:React 正在努力实现一个新的编译器。目前,Instagram 已经在利用这项技术,它将在未来版本的 React 中发布。🔥 服务器组件:经过多年的开发,React 引入了服务器组件的概念。您现在可以在 Next.js 中使用此功能。💪 动作:动作还将彻底改变我们与 DOM 元素的交互方式。🌇 文档元数据:另一个急需改进的方面即将到来,使开发人员能够用更少的代码实现更多功能。💼 资源加载:这将使资源能够在后台加载,从而改善应用程序的加载时间和用户体验。

晓风晓浪 3458

React19 她来了,她来了,他带着礼物走来了

时,浏览器在下载字体文件时,会显示一段时间的空白文本,直到字体文件完全加载完成。这允许用户在不必等待整个页面在服务器端渲染完成的情况下,更早地看到页面的某些部分。还未开源,所以我们无法得知其内部实现细节,不过我们可以从以往的动态中窥探一下。之前开始写的,为了让大家能够有一个轻松的假期,索性就没在节内发送。将帮助增强用户体验,并应该导致更快的响应。针对,其内部是如何实现的,我们后期会有专门的文章来介绍,这里就不在过多解释了。文档元数据:这是另一个备受期待的改进,让我们能够用更少的代码实现更多功能。

weixin_52884694的博客 690
上一篇: linux配置mysql数据库远程连接失败
下一篇: vim中常用基本命令
enjoyphp
博客等级 码龄9年 3粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值