优雅,永不过时

233 阅读3分钟

如何写出让别人看着不嫌弃的代码?本文主要从实际出发,记录一些平时在工作中或者学习中的更高级的前端代码编写技巧。

1、单个if-else

使用三元运算符替代单个if-else情况。如果出现多层if-else的情况,不建议使用三元运算符,这样只会加大代码的阅读难度。

// 替换前
if(value === 1){
  name = 'jack'
}else{
  name = 'zhou'
}
// 替换后
let name = value === 1 ? 'jack' : 'zhou'

2、使用解构赋值

在取出对象的值时,使用解构赋值。

// 替换前
let obj = {
  a: 1,
  b: 2,
};
let a = obj.a;
let b = obj.b;
// 替换后
let { a, b } = obj;

3、扩展运算符

扩展运算符的使用,可以在一定程度上简化代码操作。

// 替换前
let a = [1, 2, 3];
let b = [4, 5];
let c = a.concat(b);
let a1 = {
  a: 1,
};
let b1 = {
  b: 2,
};
let c1 = Object.assign({}, a1, b1);
// 替换后
let c = [...a, ...b];
let c1 = { ...a1, ...b1 };
let d = [...b, 3, ...a, 8];

4、模板字符串

使用模板字符串代替,用+拼接的方式。模板字符串支持变量,表达式,函数等。

// 替换前
let a = "123";
let b = a + "34";
// 替换后
let b = `${a}34`;

5、includes方法

当需要判断一个变量是否是多种情况中的一种,可以使用数组进行存储所有的情况,并使用includes方法判断。这种方法也有利于后续的条件拓展。

// 替换前
if (a === "1" || a === "2" || a === "3") {
}
// 替换后
const condition = ["1", "2", "3"];
if(condition.includes(a)){
}

6、对象的遍历

使用对象或者数组的遍历方法,替代for循环。

const obj = {
  a: 1,
  b: 2,
};
Object.values(obj).forEach(() => {});
Object.keys(obj).forEach(() => {});
Object.entries(obj).forEach(() => {});

const arr = [1, 3, 4];
arr.forEach(() => {});
arr.map(() => {});
arr.filter(() => {});
arr.some(() => {});
arr.every(() => {});
arr.find(() => {});
......

7、短路运算和可选链

先说一说之前常用的短路运算符&&||

表达式1&&表达式2,如果表达式1的运算结果为false,则整个表达式的结果为false,同时不会再对后面的表达式2进行运算判断。如果表达式1的运算结果为true,则根据表达式2的运算结果继续判断。

表达式1||表达式2,如果表达式1的运算结果为true,则整个表达式的结果为true,同时不会再对后面的表达式2进行运算判断。如果表达式1的运算结果为false,则根据表达式2的运算结果继续判断。

可选操作符?.的使用,可以避免某些因引用不存在对象的属性值而导致的异常错误。尤其在实际业务代码中,我们不能确定接口返回会不会出现null值的情况,所有需要做判空处理,可选操作符可简化操作。

// 替换前
let a = c && c.a;
// 替换后
let a = c?.a

??的使用,表达式1??表达式2,当表达式1为null或者undefined时,才会返回表达式2的结果。

let a = null ?? '1'
// a = 1
let b = undefined ?? '2'
// b = 2
let c = 0 ?? '1'
// c = 0
let d = '' ?? '2'
// d = ''