文章來源于公眾號:前端人 作者:鬼哥
最近在我在技術(shù)群聊天時,看到有個小伙伴提出關(guān)于可選鏈
語法的問題。那這篇文章我們就來聊一下幾個js
的騷操作(`我認(rèn)為是代碼優(yōu)化技巧
)
在很多場景下,使用可選鏈
語法來編碼,是非常有優(yōu)勢的,尤其是數(shù)據(jù)層級較深,或者數(shù)據(jù)層級屬性不明確的時候,使用可選鏈
語法大大簡化了代碼,和提升代碼效率!
可選鏈操作符( ?.
)
const UserObj = {
getAge:()=>{}
};
// ***********************
//1.使用普通的判斷語法
var name = UserObj.info?UserObj.info.name:"";
console.log(name);
//2.使用可選鏈 語法
var name = UserObj.info?.name;
console.log(name);
// 輸出undefined 而不會報錯
// ***********************
//1.使用普通的判斷語法(暫不做函數(shù)類型判斷)
var name;
if(UserObj.getName){
name=UserObj.getName();
}
console.log(name);
// 輸出undefined
//2.使用可選鏈 語法
var name =UserObj.getName?.();
console.log(name);
// 不存在,默認(rèn)輸出undefined 而不會報錯
// ***********************
// 如果層級較深的話,優(yōu)勢就很明顯了
const UserObj = {
logList:[]
};
//1.使用普通的判斷語法
var name;
if(UserObj.logList&&UserObj.logList[0]&&UserObj.logList[0].user&&UserObj.logList[0].user.name){
name=UserObj.logList&&UserObj.logList[0]&&UserObj.logList[0].user&&UserObj.logList[0].user.name;
}
console.log(name);
// 輸出undefined
//2.使用可選鏈 語法
var name =UserObj.logList?.[0]?.user?.name;
// 輸出undefined
//這個優(yōu)勢就很明顯了,所以為什么人家的代碼寫的好,這就是原因
?.
操作符的功能類似于 .
鏈?zhǔn)讲僮鞣煌幵谟?,單引用屬性?(null 或者 undefined) 的情況下不會引起錯誤,。與函數(shù)調(diào)用一起使用時,如果給定的函數(shù)不存在,則返回 undefined
可選鏈操作符( ?.
),允許獲取當(dāng)前對象的屬性的值,而不必明確當(dāng)前對象的屬性是否有效(存在)
管道運算符(實驗中的功能)
管道操作符 |>
允許以一種易讀的方式去對函數(shù)鏈?zhǔn)秸{(diào)用。本質(zhì)上來說,管道操作符是單參數(shù)函數(shù)調(diào)用的語法糖,它允許你像這樣執(zhí)行一個調(diào)用:
let url = "%21" |> decodeURI;
使用傳統(tǒng)語法寫的話,等效的代碼是這樣的:
let url = decodeURI("%21");
從這個小例子確實看不出啥優(yōu)勢,但是你看下這個呢?
const getWeChat = (name) => `${name},請關(guān)注公眾號【前端人】`;
const getInfo = (name) => `${name},我今年18歲`;
const getName = (title) => title+"鬼哥";
// 普通js語法
getWeChat(getInfo(getName("我的名字叫:")))
// 管道操作符語法
"我的名字叫:" |> getName |> getInfo|> getWeChat;
// 輸出 我的名字叫:鬼哥,我今年18歲
寫到這,我思考了很久,還是同意說出,使用管道操作符語法,語意上確實更加直觀
~~運算符
【~~
】運算符,簡單一點的用法就是可以將一些變量轉(zhuǎn)化為Number
(數(shù)字)類型的。
// 將數(shù)字類型的字符串轉(zhuǎn)化為純數(shù)字。
// 普通js代碼
var numStr = '123';
console.log(parseInt("123"));
// 輸出數(shù)字類型的123
// `~~`運算符
var numStr = '123';
console.log(~~numStr);
// 輸出數(shù)字類型的123
// ***********************
// 但是如果數(shù)據(jù)本身錯誤呢?
var numStr = '我不是數(shù)字123';
console.log(parseInt("123"));
// 輸出NaN
var numStr = '我不是數(shù)字123';
console.log(~~numStr);
// 輸出數(shù)字類型的0
// 這種情況他的優(yōu)勢就出來了,使用`~~`即使是數(shù)據(jù)錯誤,但是他返回的數(shù)據(jù)類型不會影響后續(xù)數(shù)據(jù)格式的處理
好了,今天的幾個代碼優(yōu)化,前端進階小技巧就到這里了,下次繼續(xù)!
以上就是W3Cschool編程獅
關(guān)于怎么使用js操作符【新語法】優(yōu)化代碼?的相關(guān)介紹了,希望對大家有所幫助。