詳解JavaScript中if語句優(yōu)化和部分語法糖小技巧推薦
前言
- 在前端日常開發(fā)過程中,if else判斷語句使用的次數(shù)應(yīng)該是比較頻繁的了,一些較為復(fù)雜的場景,可能會用到很多判斷,在某個代碼塊使用很多if else時,代碼會顯得較為冗余,閱讀起來不夠清晰。
- 除了if else,在開發(fā)過程中,還經(jīng)常使用 邏輯運算符 && || 以及三木運算符? : 等。
if else 基本使用
let name = "zhangsan";
if (name === "zhangsan") {
console.log("zhangsan"); // zhangsan
} else {
console.log("lisi");
}簡化if判斷和優(yōu)化代碼
單行if else
if (name === "zhangsan") console.log("zhangsan");
else console.log("lisi");使用&& || 優(yōu)化
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("年齡屬性不存在"); // 年齡屬性不存在使用三目運算符優(yōu)化
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流程 優(yōu)化 多個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 優(yōu)化多條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語法糖
箭頭函數(shù)
/**
* 箭頭函數(shù)
*
* */
function userInfo(name, age) {
return `名字是:${name},年齡是:${age}`;
}
let userInfo = (name, age) => `名字是:${name},年齡是:${age}`;
console.log(userInfo("zhangsan", "23"));
三目運算符處理函數(shù)
function log1() {
console.log(1);
}
function log2() {
console.log(2);
}
let num = 2;
if (num === 1) {
log1();
} else {
log2();
}
num === 1 ? log1() : log2();函數(shù)默認參數(shù)處理
let getUser = (name = "zhangsan", age = 23) =>
`名字是:${name},年齡是:${age}`;
console.log("默認參數(shù)", getUser());
console.log("傳參", getUser("lisi", 29));數(shù)據(jù)類型轉(zhuǎn)換
let num1 = +"123"; console.log(num1);
Null、Undefined 布爾值等特殊值處理,使用||結(jié)合!
/** * * Null、Undefined 布爾值等特殊值處理,使用||結(jié)合! * * */ 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 || "其他人"); // 其他人
鏈判斷運算符
?.運算符在運算過程中,會首先從左到右執(zhí)行,左側(cè)的對象是否為null或undefined。如果是的,就不再往右邊執(zhí)行運算,而是返回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);
空值合并操作符 ??
概念
- 空值合并操作符(??)是一個邏輯操作符,當左側(cè)的操作數(shù)為 null 或者 undefined 時,返回其右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
- 與邏輯或操作符(||)不同,邏輯或操作符會在左側(cè)操作數(shù)為假值時返回右側(cè)操作數(shù)。
- 如果使用 || 來為某些變量設(shè)置默認值,可能會遇到意料之外的行為。比如為假值(例如,'' 或 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
小結(jié)
- 以上就是對于if代碼優(yōu)化的一些建議,if else 在使用過程中,有時候會相對繁瑣一些,但是也是較為直接的判斷語句
- 是否優(yōu)化if語句,還是要根據(jù)具體的業(yè)務(wù)場景,具體去做,需要個人進行判斷
- JavaScript的語法糖在日常開發(fā)過程中,可以省去一些繁瑣的判斷或者說語義化
- ES6或者更高版本的ECMA語法更新了不少,對于一些語法的擴展,在開發(fā)過程中還是提供了不少幫助。
源碼地址
碼云 https://gitee.com/lewyon/vue-note
githup https://github.com/akari16/vue-note
到此這篇關(guān)于JavaScript中if語句優(yōu)化和部分語法糖小技巧推薦的文章就介紹到這了,更多相關(guān)js if語句優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實現(xiàn)網(wǎng)頁右側(cè)帶動畫效果的伸縮窗口代碼
這篇文章主要介紹了JS實現(xiàn)網(wǎng)頁右側(cè)帶動畫效果的伸縮窗口代碼,通過JavaScript基于時間函數(shù)實現(xiàn)頁面元素樣式漸變效果,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
Bootstrap Modal對話框如何在關(guān)閉時觸發(fā)事件
這篇文章主要為大家詳細介紹了Bootstrap Modal對話框如何在關(guān)閉時觸發(fā)事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
使用layer.msg 時間設(shè)置不起作用的解決方法
今天小編就為大家分享一篇使用layer.msg 時間設(shè)置不起作用的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
js+html5通過canvas指定開始和結(jié)束點繪制線條的方法
這篇文章主要介紹了js+html5通過canvas指定開始和結(jié)束點繪制線條的方法,涉及html5屬性的操作技巧,需要的朋友可以參考下2015-06-06

