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

发布时间:2023-04-01 12:00

目录
  • 前言
    • 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语句优化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

              ItVuer - 免责声明 - 关于我们 - 联系我们

              本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

              桂ICP备16001015号