詳解JavaScript中if語(yǔ)句優(yōu)化和部分語(yǔ)法糖小技巧推薦
前言
- 在前端日常開(kāi)發(fā)過(guò)程中,if else判斷語(yǔ)句使用的次數(shù)應(yīng)該是比較頻繁的了,一些較為復(fù)雜的場(chǎng)景,可能會(huì)用到很多判斷,在某個(gè)代碼塊使用很多if else時(shí),代碼會(huì)顯得較為冗余,閱讀起來(lái)不夠清晰。
- 除了if else,在開(kāi)發(fā)過(guò)程中,還經(jīng)常使用 邏輯運(yùn)算符 && || 以及三木運(yùn)算符? : 等。
if else 基本使用
let name = "zhangsan"; if (name === "zhangsan") { console.log("zhangsan"); // zhangsan } else { console.log("lisi"); }
簡(jiǎn)化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ùn)算符優(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)化 多個(gè)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); }
使用對(duì)象 key-value 優(yōu)化多條if語(yǔ)句
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語(yǔ)法糖
箭頭函數(shù)
/** * 箭頭函數(shù) * * */ function userInfo(name, age) { return `名字是:${name},年齡是:${age}`; } let userInfo = (name, age) => `名字是:${name},年齡是:${age}`; console.log(userInfo("zhangsan", "23"));
三目運(yùn)算符處理函數(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ù)默認(rèn)參數(shù)處理
let getUser = (name = "zhangsan", age = 23) => `名字是:${name},年齡是:${age}`; console.log("默認(rèn)參數(shù)", getUser()); console.log("傳參", getUser("lisi", 29));
數(shù)據(jù)類(lèi)型轉(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 || "其他人"); // 其他人
鏈判斷運(yùn)算符
?.運(yùn)算符在運(yùn)算過(guò)程中,會(huì)首先從左到右執(zhí)行,左側(cè)的對(duì)象是否為null或undefined。如果是的,就不再往右邊執(zhí)行運(yùn)算,而是返回undefined
更多鏈判斷運(yùn)算符請(qǐng)參考
鏈判斷運(yùn)算符
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);
空值合并操作符 ??
概念
- 空值合并操作符(??)是一個(gè)邏輯操作符,當(dāng)左側(cè)的操作數(shù)為 null 或者 undefined 時(shí),返回其右側(cè)操作數(shù),否則返回左側(cè)操作數(shù)。
- 與邏輯或操作符(||)不同,邏輯或操作符會(huì)在左側(cè)操作數(shù)為假值時(shí)返回右側(cè)操作數(shù)。
- 如果使用 || 來(lái)為某些變量設(shè)置默認(rèn)值,可能會(huì)遇到意料之外的行為。比如為假值(例如,'' 或 0)時(shí)。
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é)
- 以上就是對(duì)于if代碼優(yōu)化的一些建議,if else 在使用過(guò)程中,有時(shí)候會(huì)相對(duì)繁瑣一些,但是也是較為直接的判斷語(yǔ)句
- 是否優(yōu)化if語(yǔ)句,還是要根據(jù)具體的業(yè)務(wù)場(chǎng)景,具體去做,需要個(gè)人進(jìn)行判斷
- JavaScript的語(yǔ)法糖在日常開(kāi)發(fā)過(guò)程中,可以省去一些繁瑣的判斷或者說(shuō)語(yǔ)義化
- ES6或者更高版本的ECMA語(yǔ)法更新了不少,對(duì)于一些語(yǔ)法的擴(kuò)展,在開(kāi)發(fā)過(guò)程中還是提供了不少幫助。
源碼地址
碼云 https://gitee.com/lewyon/vue-note
githup https://github.com/akari16/vue-note
到此這篇關(guān)于JavaScript中if語(yǔ)句優(yōu)化和部分語(yǔ)法糖小技巧推薦的文章就介紹到這了,更多相關(guān)js if語(yǔ)句優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)現(xiàn)頁(yè)面導(dǎo)航層級(jí)指示效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)頁(yè)面導(dǎo)航層級(jí)指示效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08關(guān)于BootstrapTable 導(dǎo)出數(shù)據(jù)的問(wèn)題最終解決方案
這篇文章主要介紹了BootstrapTable 導(dǎo)出數(shù)據(jù)的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Easyui Tree獲取當(dāng)前選擇節(jié)點(diǎn)的所有頂級(jí)父節(jié)點(diǎn)
這篇文章主要介紹了Easyui Tree獲取當(dāng)前選擇節(jié)點(diǎn)的所有頂級(jí)父節(jié)點(diǎn),以及easyUI Tree顯示選中節(jié)點(diǎn)的所有父節(jié)點(diǎn)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-02-02wow.js實(shí)現(xiàn)炫酷的頁(yè)面滾動(dòng)伴隨動(dòng)畫(huà)示例詳解
這篇文章主要為大家介紹了wow.js實(shí)現(xiàn)炫酷的頁(yè)面滾動(dòng)伴隨動(dòng)畫(huà)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02javascript實(shí)現(xiàn)當(dāng)前頁(yè)導(dǎo)航激活的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)當(dāng)前頁(yè)導(dǎo)航激活的方法,涉及javascript操作css的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-02-02