小白必学JS优雅简洁写法

288 阅读3分钟

当我们刚开始学习JS代码时,我们只需要掌握JS中对应知识点就好,随着对JS代码熟悉程度,我们就要思考如何写出更优雅、更简洁的代码。

接下来我分享10种常用JS代码功能,通过常规写法和优雅写法的对比,来体现其优雅和简洁性。代码中用了ES6新特性,如果你对ES6不了解,可以先收藏好。在后期的VUE中,基本都在和ES6打交道

1、数组合并

常规写法

利用concat方法来合并数组

  const apples = ['红苹果', '烂苹果'];
  const fruits = ['西瓜', '草莓', '葡萄'].concat(apples);
  console.log(fruits); // ['西瓜','草莓','葡萄', '红苹果','烂苹果']

优雅写法

利用ES6中的 ...扩展运算符 来合并数组

  const apples = ['红苹果', '烂苹果'];
  const fruits = ['西瓜', '草莓', '葡萄', ...apples];
  console.log(fruits); // ['西瓜', '草莓', '葡萄', '红苹果', '烂苹果']

2、数组中取值

常规写值

利用数组下标一个一个从数组中取数据

  const num = [1, 2];
  const num1 = num[0];
  const num2 = num[1];
  console.log(num1, num2); // 1 2

优雅写法

利用ES6的解构赋值来取值

  const num = [1, 2];
  const [num1, num2] = num;
  console.log(num1, num2);

3、对象取值

常规写法

对象.属性名 的方式获取属性值

  const user = {
    name: 'zhangsan',
    age: 30
  };
  const name = user.name;
  const age = user.age;
  console.log(name, age); // "zhangsan" 30

优雅写法

利用ES6的解构赋值来实现

  const user = {
    name: "zhangsan",
    age: 30
  }
  const { name, age } = user;
  console.log(name, age); // "zhangsan" 30

4、数组循环

常规写法

利用for 循环来遍历数组,从而取值

  const fruits = ['西瓜','草莓','葡萄','苹果'];
  for (let i = 0; i < fruits.length; i++) {
    console.log(fruits[i])
  }

优雅写法

利用ES6的for...of来遍历数组取值

  const fruits = ['西瓜','草莓','葡萄','苹果'];
  for (fruit of fruits) {
    console.log(fruit);
  }

5、回调函数

常规写法

forEach 中回调函数为普通函数

  const fruits = ['西瓜','草莓','葡萄','苹果'];
  fruits.forEach(function (fruit) {
    console.log(fruit); // 西瓜 草莓 葡萄 苹果
  })

优雅写法

forEach 中回调函数为箭头函数,如果箭头函数中只有一句代码,则可以省略{}

  const fruits = ['西瓜','草莓','葡萄','苹果'];
  fruits.forEach((fruit) => console.log(fruit)); // 西瓜 草莓 葡萄 苹果

6、数组搜索

常规写法

数组中保存着每一条水果的信息,我们通过输入水果名,到数组中查找对应的信息。

利用常规的for循环遍历来查找

  const fruits = [
    { name: '苹果', order: 1},
    { name: '梨子', order: 4},
    { name: '香蕉', order: 2},
  ];

  function getApples (arr, value) {
    for (let index = 0; index < arr.length; index ++) {
      if (arr[index].name === value) {
        return arr[index];
      }
    }
  }
  const result = getApples(fruits, '苹果');
  console.log(result); //  { name: '苹果', order: 1}

优雅写法

利用数组的find方法来实现搜索

  const fruits = [
    { name: '苹果', order: 1},
    { name: '梨子', order: 4},
    { name: '香蕉', order: 2},
  ];

  function getApples(arr, value) {
    return arr.find((obj) => obj.name === value);
  }
  const result = getApples(fruits, '梨子');
  console.log(result); // { name: '梨子', order: 4}

7、字符串转换为数字

常规写法

利用parseInt来实现

  const num = parseInt("10");
  console.log(num, typeof num); // 10 "number"

优雅写法

利用+号来实现,不过只是针对纯数字的字符串有效

  const num = + "10";
  console.log(num typeof num); // => 10 "number"
  console.log(+"10" === 10); // true

8、null值初始化

常规写法

通过if判断,如果为null,则初始化值为“普通用户”

  // 获取用户角色
  function getUserRole (role) {
    let userRole;
    if (role) userRole = role;
    else userRole = "普通用户";
    return userRole;
  }
  console.log(getUserRole()); // 普通用户
  console.log(getUserRole("管理员")); // 管理员

优雅写法

通过 || 或短路运算符来实现

  function getUserRole (role) {
    return role || '普通用户'; // 默认值定义的常见方法
  }
  console.log(getUserRole()); // '普通用户'
  console.log(getUserRole('管理员')); // '管理员'

9、字符串拼接

常规写法

  const name = '张三';
  const age = 23;
  const message = '大家好,我叫' + name + '今年' + age + '岁了!';
  console.log(message); // 大家好,我叫张三,今年23岁了!

优雅写法

  const name = '张三';
  const age = 23;
  const message = `大家好,我叫${name},今年${age}岁了!`;
  console.log(message); //  Hi DevPoint!

10、对象合并

常规写法

利用for循环来遍历

  const employee = { name: '张三', age: 30};
  const salary = { grade: 'A'};
  const summary = salary; // 用来做合并后对象
  for (const key in employee) {
    summary[key] = employee[key];
  }
  console.log(summary); // { grade: 'A', name: '张三', age: 30 }

优雅写法

利用es6的扩展运算符和解构赋值来实现

  const employee = { name: '张三', age: 30};
  const salary = { grade: 'A'};
  const summary = { ...employee, ...salary };
  console.log(summary); // { grade: 'A', name: '张三', age: 30 }