LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[转帖]js 常用简写技巧(干货满满)

freeflydom
2023年5月25日 18:1 本文热度 92

分享一些自己常用的js简写技巧,长期更新,会着重挑选一些实用的简写技巧,使自己的代码更简洁优雅~

另外推荐一个只用一行代码实现一个方法的实用网站1loc.dev

If-Else 用 || 或 ?? 运算符进行简化

逻辑或操作符||,这里要注意的是0''也会认为是false

这是常用的逻辑或操作符,会把0 '' false null undefined全部当成false处理

function(obj){

  var a = obj || {}

}

// 等价于 =>>

function(obj){

  var a;

  if(

    obj === 0 || 

    obj === "" || 

    obj === false || 

    obj === null || 

    obj === undefined

  ){

     a = {}

   } else {

     a = obj;

  }

}



空值合并操作符??如果没有定义左侧返回右侧。如果是,则返回左侧。

这种方法非常实用,有时候仅仅只是想判断一个字段有没有值,而不是把空字符串或者0也当做false处理

function(obj){

  var a = obj ?? {}

}

// 等价于 =>>

function(obj){

  var a;

  if(

    obj === null || 

    obj === undefined

  ){

     a = {}

   } else {

     a = obj;

  }

}



输入框非空的判断(有时候不想把0当成false可以用此方法。比如分数0也是个值,这种情况就不能认为是false)

if(value !== null && value !== undefined && value !== ''){}

// 等价于 ==>

if((value ?? '') !== ''){}


includes的正确使用姿势

在上面逻辑或操作符||代码段里有一个if判断比较长,这时候就可以用includes去简化代码

if(

  obj === 0 || 

  obj === "" || 

  obj === false || 

  obj === null || 

  obj === undefined

){

  // ...

}


// 使用includes简化

if([0, '', false, null, undefined].includes(obj)){

  // ...

}


防止崩溃的可选链(?.)

可选链操作符?. 如果访问未定义的属性,则会产生错误。这就是可选链的用武之地。 在未定义属性时使用可选链运算符,undefined将返回而不是错误。这可以防止你的代码崩溃。

const student = {

  name: "Matt",

  age: 27,

  address: {

    state: "New York"

  },

};


// LONG FORM

console.log(student && student.address && student.address.ZIPCode); // Doesn't exist - Returns undefined

// SHORTHAND

console.log(student?.address?.ZIPCode); // Doesn't exist - Returns undefined


逻辑空赋值(??=)

逻辑空赋值??= 逻辑空赋值运算符(x ??= y)仅在 x 是 nullish (null 或 undefined) 时对其赋值。

const a = { duration: 50 };


a.duration ??= 10;

console.log(a.duration);

// expected output: 50


a.speed ??= 25;

console.log(a.speed);

// expected output: 25


快速生成1-10的数组

生成0-9,利用了数组的下标值

// 方法一

const arr1 = [...new Array(10).keys()]

// 方法二

const arr2 = Array.from(Array(10), (v, k) => k)


生成1-10,通过map的特性

const arr2 = [...Array(10)].map((v, i) => i + 1)


快速生成10个0的数组

const arr = new Array(10).fill(0)


快速生成10个[]的数组(二维数组)

注意: 二维数组不能直接写成new Array(10).fill([])(也就是fill方法不能传引用类型的值,[]换成new Array()也不行),因为fill里传入引用类型值会导致每一个数组都指向同一个地址,改变一个数据的时候其他数据也会随之改变,详见mdn官方说明

// 错误写法

const arr = new Array(10).fill([]) // 注意这是错误写法,不要这么写

// 正确写法

const arr = new Array(10).fill().map(() => new Array())


从数组中删除重复项

在 Javascript 中,Set 是一个集合,它允许你仅存储唯一值。这意味着删除任何重复的值。

因此,要从数组中删除重复项,你可以将其转换为集合,然后再转换回数组。

const numbers = [1, 1, 20, 3, 3, 3, 9, 9];

const uniqueNumbers = [...new Set(numbers)]; // -> [1, 20, 3, 9]


它是如何工作的?

  1. new Set(numbers)从数字列表中创建一个集合。创建集合会自动删除所有重复值。

  2. 展开运算符...将任何可迭代对象转换为数组。这意味着将集合转换回数组。[...new Set(numbers)]

在没有第三个变量的情况下交换两个变量

在 Javascript 中,你可以使用解构从数组中拆分值。这可以应用于交换两个变量而无需第三个

let x = 1;

let y = 2;


// LONGER FORM

let temp = x;

x = y;

y = temp;


// SHORTHAND

[x, y] = [y, x];


将对象的值收集到数组中

用于Object.values()将对象的所有值收集到一个新数组中

const info = { name: "Matt", country: "Finland", age: 35 };


// LONGER FORM

let data = [];

for (let key in info) {

  data.push(info[key]);

}


// SHORTHAND

const data = Object.values(info);


指数运算符(用的不多)

Math.pow()习惯把一个数字提高到一个幂吗?你知道你也可以使用**运算符吗?

虽然可以简写,不过我还是建议写成Math.pow()方法,代码更有语义化。

// LONGER FORM

Math.pow(4,2); // 16

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


// SHORTHAND

4**2 // 16

2**3 // 8



Math.floor() 简写(用的不多)

四舍五入Math.floor()并不是什么新鲜事。但是你知道你也可以使用~~运算符吗?

同上虽然可以简写,不过我还是建议写成Math.floor()方法,代码更有语义化。

// LONG FORM

Math.floor(5.25) // -> 5.0


// SHORTHAND

~~5.25 // -> 5.0




——————————————————————————
原文链接:https://juejin.cn/post/7236664417308524581



该文章在 2023/5/25 18:02:10 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved