前言
- 在前端日常开发过程中,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 语句优化和局部语法糖小技巧举荐
欢送关注公众号:程序员布欧,不定期更新一些前端入门文章
创作不易,转载请注明出处和作者。