点晴MIS问题教程区 加入收藏
问题搜索
 您的位置:点晴OA办公管理信息系统『 经验分享&问题答疑 』浏览当前教程  
  

  网站搜索
  搜索范围: 搜索方式: 关键词(可用空格分开)  

  作者及文章信息: 本文热度:16 % 
freeflydom

积分:3746
等级:网站管理员
文数:101
注册:2017-2-28

 信息       

楼 顶 

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


分享一些自己常用的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 编辑过

  离 线  2023/5/25 18:01:28 
  本文章共有 0 页, 0 张回文,每页有 10 张回文 >> [ ]
页码:  
Copyright 2010-2023 ClickSun All Rights Reserved