JavaScript ,竟然还不知道这些技巧

作者:神秘网友 发布时间:2021-02-26 16:20:24

JavaScript ,竟然还不知道这些技巧

转载写了这么多年 JavaScript ,竟然还不知道这些技巧

不少人有五年的JavaScript经验,但实际上可能只是一年的经验重复用了五次而已。完成同样的逻辑和功能,有人可以写出意大利面条一样的代码,也有人两三行简洁清晰的代码就搞定了。简洁的代码不但方便阅读,还能减少复杂逻辑和出错的可能性。本文就介绍一些常用的JavaScript简化技巧,日常开发都用得上。

1. 简化条件表达式

经常碰到这种情况,要判断某个变量是否为指定的某些值,用常规的逻辑表达式会很长。我的做法是把这些值放进数组里:

// 太长的逻辑表达式
if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') {
    //其他逻辑
}
// 简写
if (['abc', 'def', 'ghi', 'jkl'].includes(x)) {
   //其他逻辑
}

2. 简化 if ... else

if...else太常用了,以至于很多人都忘了其实还有其他方式来判断条件。比如简单的变量赋值,完全没必要用这种冗长的语句,一行表达式就搞定了:

// 新手的写法
let test= boolean;
if (x  100) {
    test = true;
} else {
    test = false;
}
// 简写表达式
let test = (x  10)  true : false;
// 更直接的
let test = x  10;
console.log(test);

三元表达式可以做复杂的条件分支判断,不过牺牲了一些可读性:

let x = 300,
let test2 = (x  100)  'greater 100' : (x  50)  'less 50' : 'between 50 and 100';
console.log(test2); // "greater than 100"

3. 判空并赋默认值

Code Review 的时候我经常看到这样的代码,判断变量不是nullundefined''的时候赋值给第二个变量,否则给个默认值:

if (first !== null || first !== undefined || first !== '') {
    let second = first;
}
// 简写
let second = first || '';

4. 简写循环遍历

for循环是最基本的,但是有点繁琐。可以用for...infor...of或者forEach代替:

// Longhand
for (var i = 0; i  testData.length; i++)

// Shorthand
for (let i in testData) or  for (let i of testData)

数组遍历:

function testData(element, index, array) {
  console.log('test[' + index + '] = ' + element);
}

[11, 24, 32].forEach(testData);
// 打印输出: test[0] = 11, test[1] = 24, test[2] = 32

4. 简化 switch

这个技巧也很常用,把switch转换成对象的key-value形式,代码简洁多了:

// Longhand
switch (data) {
  case 1:
    test1();
  break;

  case 2:
    test2();
  break;

  case 3:
    test();
  break;
  // And so on...
}

// Shorthand
var data = {
  1: test1,
  2: test2,
  3: test
};

data[anything]  data[anything]();

5. 简化多行字符串拼接

如果一个字符串表达式过长,我们可能会拆成多行拼接的方式。不过随着 ES6 的普及,更好的做法是用模板字符串:

//longhand
const data = 'abc abc abc abc abc abc\n\t'
    + 'test test,test test test test\n\t'
//shorthand
const data = `abc abc abc abc abc abc
         test test,test test test test`

6. 善用箭头函数简化 return

ES6 的箭头函数真是个好东西,当函数简单到只需要返回一个表达式时,用箭头函数最合适不过了,return都不用写:

Longhand:
//longhand
function getArea(diameter) {
  return Math.PI * diameter
}
//shorthand
getArea = diameter = (
  Math.PI * diameter;
)

7. 简化分支条件语句

又是你,if...else if...else!跟switch类似,也可以用key-value形式简化:

// Longhand
if (type === 'test1') {
  test1();
}
else if (type === 'test2') {
  test2();
}
else if (type === 'test3') {
  test3();
}
else if (type === 'test4') {
  test4();
} else {
  throw new Error('Invalid value ' + type);
}
// Shorthand
var types = {
  test1: test1,
  test2: test2,
  test3: test3,
  test4: test4
};

var func = types[type];
(!func)  throw new Error('Invalid value ' + type); func();

8. 重复字符串 N 次

有时候出于某种目的需要将字符串重复 N 次,最笨的方法就是用for循环拼接。其实更简单的方法是用repeat

//longhand 
let test = ''; 
for(let i = 0; i  5; i ++) { 
  test += 'test '; 
} 
console.log(str); // test test test test test 
//shorthand 
'test '.repeat(5);

9. 指数运算

//longhand
Math.pow(2,3); // 8
//shorthand
2**3 // 8

10. 数字分隔符

这是比较新的语法,ES2021 提出来的,大数字在书写的时候可以用下划线分割,提高了可读性:

// 旧语法
let number = 98234567

// 新语法
let number = 98_234_567

总结

没啥好总结的,拿去用就是了。

这个图的信息量太大了,你们猜猜是什么

JavaScript ,竟然还不知道这些技巧 相关文章

  1. javaScript中的继承

    借用原型链 通过prototype属性 function SuperType() { this.superType = 'SuperType';}SuperType.prototype.getSuper = function() { return this.superType;}function ChildType() { this.childType = ';childType'}// 继承了SuperTypeChildType.prototype

  2. JavaScript 动态表格

    ` 动态表格 style table{ border: 1px solid; margin: auto; width: 500px; } td,th{ text-align: center; border: 1px solid; } div{ text-align: center; margin: 50px; }/style table caption学生信息表/caption tr th编号/th th姓名/th th性别/th th操作

  3. js 时间与时间戳的转换

    js 时间与时间戳的转换 一:时间转时间戳:javascript获得时间戳的方法有四种,都是通过实例化时间对象new Date() 来进一步获取当前的时间戳 1.var timestamp1 = Date.parse(new Date()); // 结果:1477808630000 不推荐这种办法,毫秒级别的数值被转化为000

  4. selenium学习笔记11-JavaScript操作滚动条

    selenium执行JavaScript脚本 webdriver有两个方法来执行JavaScript,分别是: execute_script同步执行 execute_async_script异步执行 通过JavaScript通常可以实现页面滚动 代码如下: from selenium import webdriver from time import sleep class TestCase

  5. 简单的用户交互Scanner

    不知道各位是不是,在我一开始接触Java的时候,看的两本书好像都是,在啥都没有学的时候,就已经看见了这个Scanner,所以这一篇博客就来说一下Scanner的使用: 我感觉在新手学习阶段中(就我现在的这阶段),Scanner是程序与人交互的最简单的一种方式,这是J

  6. Python和JavaScript在使用上有什么区别

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://www.freecodecamp.org/news/python-vs-javascript-what-are-the-key-differences-between-the-two-popular-programming-languages/ JavaScr

  7. JavaScript中this的指向

    转载地址: https://note.youdao.com/ynoteshare1/index.htmlid=b2fab3b044aa90033395df0c8c9ca3a4type=note 引子 在JavaScript中 this 的指向总是让人很困惑,它到底指的啥为了彻底弄清它,我们就来探讨一下吧。 this 在不同的执行环境,不同的用法下会有所

  8. JavaScript教程(一):数据类型

    确定值类型:typeof、instanceof、Object.prototype.toString 1、typeof运算符 返回类型:number、string、boolean、undefined、null、object、function 1.1 知识点补充:null 和 undefined的区别 区别: null:表示空值 undefined:未定义 Number(null) //

  9. javascript中的作用域

    前言 本篇是基于对 《你不知道的JavaScript(上卷)》中的第一、二、三、四章的总结理解。 编译原理 在代码执行之前进行的操作叫“编译”,一般有三个步骤: 分词/词法分析:这个操作是将有意义的代码生成词法单元; 解析/语法分析:将词法单元生成为AST(抽

  10. 98%的DBA不知道的数据库内存知识点

    |作者 邓英明,腾讯云DBA,擅长数据库架构设计、故障诊断、性能优化,现主要负责腾讯云数据库MySQL/TDSQL-C/Redis的相关工作。 在日常工作中,时不时会收到内存使用率高的告警,那么我们应该如何处理呢?本文将从Linux和MySQL两个层面,介绍内存管理的相关知

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词