详解JavaScript中if语句优化和部分语法糖小技巧推荐

目录
  • 前言
    • if else 基本使用
    • 简化if判断和优化代码
      • 单行if else
      • 使用&& || 优化
      • 使用三目运算符优化
      • 合并if
      • 使用includes 或者indexof
      • 使用switch流程 优化 多个if else
      • 使用对象 key-value 优化多条if语句
      • 使用map
  • 推荐一些常用的JavaScript语法糖
    • 箭头函数
    • 三目运算符处理函数
    • 函数默认参数处理
    • 数据类型转换
    • Null、Undefined 布尔值等特殊值处理,使用||结合!
    • 链判断运算符
      • 链判断运算符
    • 空值合并操作符 ??
      • 概念
      • 源码地址
  • 小结

前言

  • 在前端日常开发过程中,if else判断语句使用的次数应该是比较频繁的了,一些较为复杂的场景,可能会用到很多判断,在某个代码块使用很多if else时,代码会显得较为冗余,阅读起来不够清晰。
  • 除了if else,在开发过程中,还经常使用 逻辑运算符 && || 以及三木运算符? : 等。

if else 基本使用

let name = "zhangsan";
if (name === "zhangsan") {
	console.log("zhangsan"); // zhangsan
} else {
	console.log("lisi");
}

简化if判断和优化代码

单行if else

if (name === "zhangsan") console.log("zhangsan");
else console.log("lisi");

使用&& || 优化

let userInfo = {
	name: "zhangsan",
};
if (userInfo.name === "zhangsan") {
	console.log("zhangsan");
}
if (!userInfo.age) {
	// userInfo.age--> false age属性不存在
	console.log("年龄属性不存在");
}
userInfo.name === "zhangsan" && console.log("zhangsan");
userInfo.age || console.log("年龄属性不存在"); // 年龄属性不存在

使用三目运算符优化

let name = "zhangsan";
name === "zhangsan" ? console.log("zhangsan") : console.log("lisi");

合并if

let userObj = { name: "zhangsan", children: { name: "lisi" } };
if (userObj.children) {
  if (userObj.children.name == "lisi") {
    console.log(userObj.children.name);
  }
}
if (userObj.children && userObj.children.name == "lisi")
  console.log(userObj.children.name);

使用includes 或者indexof

let age = "22";
if (age == "22" || age == "24" || age == "25") {
  console.log(age);
}
let ageArray = ["22", "24", "25"];
if (ageArray.includes(age)) {
  console.log(age);
}
if (ageArray.indexOf(age) > -1) {
  console.log(age);
}

使用switch流程 优化 多个if else

let val = "lisi";
switch (val) {
  case "zhangsan":
    console.log(val);
    break;
  case "lisi":
    console.log(val);
    break;
  case "xiaoming":
    console.log(val);
    break;
  case "xiaowang":
    console.log(val);
    break;
  default:
    console.log(val);
}

使用对象 key-value 优化多条if语句

let userArray = [
  { name: "zhangsan" },
  { name: "lisi" },
  { name: "xiaoming" },
  { name: "xiaowang" },
];

// 多重if else
if (userArray.name === "zhangsan") {
  console.log(userArray.name);
} else if (userArray.name === "lisi") {
  console.log(userArray.name);
} else if (userArray.name === "xiaoming") {
  console.log(userArray.name);
} else if (userArray.name === "xiaowang") {
  console.log(userArray.name);
} else {
  console.log("其他用户");
}

function getUser(username) {
  return userArray.filter((item) => item.name == username)[0];
}
console.log(getUser("zhangsan"));

使用map

let filterUser = function (username) {
  return `名字是${username}`;
};
let userMap = new Map([
  ["zhangsan", filterUser("zhangsan")],
  ["lisi", filterUser("lisi")],
  ["xiaoming", filterUser("xiaoming")],
  ["xiaowang", filterUser("xiaowang")],
]);
console.log(userMap.get("zhangsan"));   // 名字是zhangsan

推荐一些常用的JavaScript语法糖

箭头函数

/**
 * 箭头函数
 *
 * */
function userInfo(name, age) {
  return `名字是:${name},年龄是:${age}`;
}
let userInfo = (name, age) => `名字是:${name},年龄是:${age}`;
console.log(userInfo("zhangsan", "23"));

三目运算符处理函数

function log1() {
  console.log(1);
}
function log2() {
  console.log(2);
}
let num = 2;
if (num === 1) {
  log1();
} else {
  log2();
}
num === 1 ? log1() : log2();

函数默认参数处理

let getUser = (name = "zhangsan", age = 23) =>
      `名字是:${name},年龄是:${age}`;

console.log("默认参数", getUser());
console.log("传参", getUser("lisi", 29));

数据类型转换

let num1 = +"123";
console.log(num1);

Null、Undefined 布尔值等特殊值处理,使用||结合!

/**
 *
 * Null、Undefined 布尔值等特殊值处理,使用||结合!
 *
 * */
let name1 = undefined;
let name2 = null;
let name3 = true;
let name4 = false;
let name5 = "lisi";
console.log(name1 || "其他人"); // 其他人
console.log(name2 || "其他人"); // 其他人
console.log(name3 || "其他人"); // true
console.log(!name3 || "其他人"); // 其他人
console.log(name4 || "其他人"); // 其他人
console.log(name5 || "其他人"); // lisi
console.log(!name5 || "其他人"); // 其他人

链判断运算符

?.运算符在运算过程中,会首先从左到右执行,左侧的对象是否为null或undefined。如果是的,就不再往右边执行运算,而是返回undefined

更多链判断运算符请参考

链判断运算符

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining

let user = {
  name: "zhangsan",
  children: { name: "lisi", children: { name: "xiaoming" } },
};
let name1 = user?.name;
let name2 = user?.children?.name;
let name3 = user?.children?.children?.name;
console.log(name1);
console.log(name2);
console.log(name3);

空值合并操作符 ??

概念

  • 空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
  • 与逻辑或操作符(||)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。
  • 如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,'' 或 0)时。
const foo = null ?? "default string";
const test = undefined ?? "default string";
const test1 = 123 ?? "default string";
console.log(test); // "default string"
console.log(foo); // "default string"
console.log(test1); // 123
const baz = 0 ?? 42;
console.log(baz); // 0
const str = "" ?? 42;
const str1 = "" || 42;
console.log(str); // ""
console.log(str1); // 42

小结

  • 以上就是对于if代码优化的一些建议,if else 在使用过程中,有时候会相对繁琐一些,但是也是较为直接的判断语句
  • 是否优化if语句,还是要根据具体的业务场景,具体去做,需要个人进行判断
  • JavaScript的语法糖在日常开发过程中,可以省去一些繁琐的判断或者说语义化
  • ES6或者更高版本的ECMA语法更新了不少,对于一些语法的扩展,在开发过程中还是提供了不少帮助。

源码地址

码云 https://gitee.com/lewyon/vue-note

githup https://github.com/akari16/vue-note

到此这篇关于JavaScript中if语句优化和部分语法糖小技巧推荐的文章就介绍到这了,更多相关js if语句优化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • js中if语句的几种优化代码写法

    尽管我还没使用它去做一些尝试性的测试,但从这里可以看到它的确对js作了美化的工作.也许有人认为if语句就那么简单,能优化到什么程度?但是看看以下的几种方式,你也许会改变看法. 一.使用常见的三元操作符 复制代码 代码如下: if (foo) bar(); else baz(); ==> foo?bar():baz(); if (!foo) bar(); else baz(); ==> foo?baz():bar(); if (foo) return bar(); else return baz

  • JSON.stringify 语法实例讲解

    认识javascript也不短的时间了,可是这个用法说实在的,我还是第一次见过,惭愧啊惭愧啊.于是乎,在网上找了写资料,写了些例子 希望能给园子们一些帮助. 作用:这个函数的作用主要是为了系列化对象的. 可能有些人对系列化这个词过敏,我的理解很简单.就是说把原来是对象的类型转换成字符串类型(或者更确切的说是json类型的).就这么简单.打个比方说,你有一个类,那么你可以通过这个方法转换成相应的json类型的.很简单吧. 接着看. 语法: JSON.stringify(value [, repla

  • 详解JavaScript中if语句优化和部分语法糖小技巧推荐

    目录 前言 if else 基本使用 简化if判断和优化代码 单行if else 使用&& || 优化 使用三目运算符优化 合并if 使用includes 或者indexof 使用switch流程 优化 多个if else 使用对象 key-value 优化多条if语句 使用map 推荐一些常用的JavaScript语法糖 箭头函数 三目运算符处理函数 函数默认参数处理 数据类型转换 Null.Undefined 布尔值等特殊值处理,使用||结合! 链判断运算符 链判断运算符 空值合并操作

  • 详解IDEA 中使用Maven创建项目常见错误和使用技巧(推荐)

    使用idea的运行程序时,出现jar包不存在的错误(pom.xml文件中有依赖,而且代码没有红色的). 解决方法:Maven安装目录下的conf文件下的setting.xml文件中不要加入本地仓库路径设置,直接在idea中设置. tomcat启动maven项目出现jar包不存在的错误.解决方法:在pom.xml文件中加上war maven依赖下载速度太慢.解决方法:在maven安装目录下的conf文件下的setting.xml中,设置阿里云的镜像仓库地址. <mirror> <id>

  • 详解JavaScript中void语句的使用

    void是在JavaScript中的一个重要的关键字可被用作其单操作数之前出现一元运算符,其可以是任何类型. 此运算符指定不需要返回值,进行计算的表达式.它的语法可能是下列之一: <head> <script type="text/javascript"> <!-- void func() javascript:void func() or: void(func()) javascript:void(func()) //--> </script

  • 详解javascript中的Strict模式

    简介 在ES5中,引入了strict模式,我们可以称之为严格模式.相应的sloppy mode就可以被称为非严格模式. 严格模式并不是非严格模式的一个子集,相反的严格模式在语义上和非严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试.以保证在严格模式下程序的执行和非严格模式下的执行效果一致. 使用Strict mode strict mode会改变javascript的一些表现,我们将会在下一节中进行详细的讲解. 这里先来看一下,怎么使用strict mode. Strict

  • 详解JavaScript 中的批处理和缓存

    场景 最近在生产环境遇到了下面这样一个场景: 后台在字典表中存储了一些之前需要前后端共同维护的枚举值,并提供根据 type/id 获取字典的 API.所以在渲染列表的时候,有很多列表的字段直接就是字典的 id,而没有经过后台的数据拼装. 起初,吾辈解决问题的流程如下 确定字典字段,添加转换后的对象类型接口 将对象列表进行转换得到其中字典字段的所有值 对字典 id 列表进行去重 根据 id 列表从后台获取到所有的字典数据 将获得的字典数据转换为 id => 字典 的 Map 遍历最初的列表,对里面

  • 详解JavaScript中哪一种循环最快呢

    了解哪一种 for 循环或迭代器适合我们的需求,防止我们犯下一些影响应用性能的低级错误. JavaScript 是 Web 开发领域的"常青树".无论是 JavaScript 框架(如 Node.js.React.Angular.Vue 等),还是原生 JavaScript,都拥有非常庞大的粉丝基础.我们来谈谈现代 JavaScript 吧.循环一直是大多数编程语言的重要组成部分,而现代 JavaScript 为我们提供了许多迭代或循环值的方法. 但问题在于,我们是否真的知道哪种循环或

  • 详解JavaScript中的箭头函数的使用

    目录 前言 箭头函数语法 无圆括号语法 隐式返回 注意隐式返回错误 无法命名箭头函数 如何处理this关键字 匿名箭头函数 不正常工作的情况 箭头函数作为对象方法 箭头函数与第三方库 箭头函数没有arguments对象 总结 前言 本文可以让你了解所有有关JavaScript箭头函数的信息.我们将告诉你如何使用ES6的箭头语法,以及在代码中使用箭头函数时需要注意的一些常见错误.你会看到很多例子来说明它们是如何工作的. JavaScript的箭头函数随着ECMAScript 2015的发布而到来,

  • 详解JavaScript中的4种类型识别方法

    具体内容如下: 1.typeof [输出]首字母小写的字符串形式 [功能] [a]可以识别标准类型(将Null识别为object) [b]不能识别具体的对象类型(Function除外) [实例] console.log(typeof "jerry");//"string" console.log(typeof 12);//"number" console.log(typeof true);//"boolean" console

  • 详解JavaScript 中getElementsByName在IE中的注意事项

    详解JavaScript 中getElementsByName在IE中的注意事项 前言: 在IE5-9中是没有实现js的 getElementsByClassName()方法,但是实现了getElementsByName()方法,但是需要注意的是这个方法在IE5-9中也返回id属性匹配的指定元素,为了兼容,应该小心谨慎使用,不要将同样的字符串同时用作了名字和ID. 测试程序如下: <div id="log"> <div id="innerLog"&

  • 详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不是基于'类的',而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能

随机推荐