2023javascript简洁写法

123 阅读3分钟

以下文章来源于前端充电宝 ,作者CUGGZ

JavaScript 中有许多简写技巧可以缩减代码长度、减少冗余并提高代码的可读性和可维护性

移除数组假值

可以使用filter()结合Boolean来简化数组假值操作

// 简化写法
let arr = [1, 0, 'scs', NaN, null, undefined, false, '', 0.2]
arr.filter(item => Boolean(item))   // [ 1, 'scs', 0.2 ]
// 更简化写法
arr.filter(Boolean)   // [ 1, 'scs', 0.2 ]

Boolean 是 JavaScript 的内置构造函数,通过传递一个值给它,可以将该值转换为布尔值。在这种情况下,Boolean 构造函数作为回调函数传递给 filter() 方法,因此会将每个数组元素转换为布尔值。只有转换结果为真值的元素才会保留在新数组中。

数组查找

在javascript中常用的数组查找方法有indexOf()findIndex(),用于查找数组中该值的下标,未查到该值则返回-1,0通常被视为false,大于0或小于0视为true,所以我们结合~按位非运算符来使用,如果需要取反使用在前面加上

// 传统写法
let arr = [1, 0, 'scs', 0.2]
arr.indexOf(2)   // -1
arr.findIndex(2) // -1

// 简化写法
~arr.indexOf(2)   // 0
~arr.findIndex(2) // 0

// 取反操作
!~arr.indexOf(2)   // true
!~arr.findIndex(2) // true

空值合并运算符

空值合并运算符??,给变量nullundefined提供默认值,执行代码时,如果该左边有值存在,则赋左边的值,没有则赋右边的值

// 传统写法
let data = "前端"
let username = data == null && data == undefined ? "007" : data

// 简化写法
let data = "前端"
let username = data ?? "007"

还有一个空值运算符是??=,给变量存在(nullundefined)进行赋值

// 传统写法
let username1 = null, username2 = "007"
if (username1 == null || username1 == undefined) {
    username1 = username2
}

// 简化写法
username1 ??= username2

链式写法

可选链操作符?.允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效

let data = {
    a:{
        b:{
            name: ''
        }
    }
}
// 传统写法
if (data && data.a && data.a.b && data.a.b.name) {}

// 简化写法
if (data.a?.b?.name) {}

也可以结合空值运算符赋值

const username = data.a?.b?.name ?? "007"

逻辑或赋值运算符(||=)

当左边的变量为假值时(例如falseNaNnull0undefined'')才会赋值,否则保留原始的值

// 传统写法
let count
if (!count) {
    count = 0
}

// 简化写法
let count
count ||= 0

逻辑且赋值运算符(&&=)

当左边的变量为真值时(例如true1、或'007')才会赋值

// 传统写法
let count = true
if (count) {
    count = 0
}

// 简化写法
let count
count &&= 0

指数幂运算符(**)

// 传统写法
Math.pow(2, 3) // 8

// 简化写法
2**3 // 8

扩展运算符(...)

// 传统写法
let data = [1, 2, 3]
let data1 = [4, 5, 6].concat(data) // 合并数组
let data2 = data.slice()           // 克隆数组

// 简化写法
let data1 = [4, 5, 6, ...data]     // 合并数组
let data2 = [...data]              // 克隆数组

可以将扩展运算符与ES6解构语法结合使用

let {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}

变量交换

// 传统写法
let a = 1
let b = 2
let temp = a // 临时变量,用与交换
a = b
b = temp

// 简化写法
[b, a] = [a, b]

变量声明

声明多个变量

// 传统写法
let a = 1
let b = 2

// 简化写法
let a = 1, b = 2

声明多个变量,同一个值

// 传统写法
let a = 1
let b = 1

// 简化写法
let a, b = 1