Js代碼高效技巧

1、 !(!!)和~符號的使用

//傳統(tǒng)方式
let str = 'javascript'
if(str.indexOf('java')>-1){
  //執(zhí)行代碼
}
//簡寫方式
if(!!~str.indexOf('java')){
//執(zhí)行代碼 (注意此方式在數(shù)據(jù)量大的情況下有性能問題)
}

說明:!!一般用來將后面的表達式強制轉換為布爾類型的數(shù)據(jù)(boolean)耘眨,也就是只能是true或者false写烤;
js中在變量名前加"~" 是位運算NOT,按位取反母剥。

2丰包、||禁熏、&& 短路運算符

//舉例1:
let flag = true
function test(){
  //執(zhí)行代碼
}
if(flag){
   test()
}
//簡寫
flag &&  test()

//舉例2
let a=100,b;
if(a>50){
  b=100
}else{
  b=5
}
等價于: b = a > 50 && 100 || 5
//可以把 && 看做是找假運算。找到假邑彪,直接停止瞧毙,將假返回;找到真寄症,則會繼續(xù)找宙彪,直到找到假才停止,并將假返回有巧。如果都為真释漆,則返回最后一個真。
//可以把 || 看做是找真運算篮迎。找到真男图,直接停止,將真返回甜橱;找到假逊笆,則會繼續(xù)找,直到找到真才停止岂傲,并將真返回难裆。如果都為假,則返回最后一個假镊掖。

3乃戈、map,object代替if else

const status= 0
const statusText = 0
// 0 已下單 ,未支付 , 1已支付, 2已發(fā)貨, 3已完成
if (statusCode === 0) {
  statusText = '已下單,未支付'
} else if (statusCode === 1) {
  statusText = '已支付'
} else if (statusCode === 2) {
  statusText = '已發(fā)貨'
}else if (statusCode === 3) {
  statusText = '已完成'
}
//更好的寫法
const statusMap = new Map([
  [0, '已下單,未支付'],
  [1, '已支付'],
  [2, '已發(fā)貨'],
  [3, '已完成'],
])
statusText  = statusMap.get(status)

4亩进、高階函數(shù)

高階函數(shù)就是一個將函數(shù)作為參數(shù)或者返回值的函數(shù)症虑。js內置的函數(shù)reduce,map,filter就是高階函數(shù)

  const arr = [{
        userName: '張三',
        sex: '男',
        code: 100
    },
    {
        userName: '張三',
        sex: '女',
        code: 80
    },
   {
        userName: '張三',
        sex: '女',
        code: 92
    },
    {
        userName: '李四',
        sex: '男',
        code: 95
    }//還有其他數(shù)據(jù)...
]
   // 要求找到數(shù)據(jù)中姓名張三
    const findPeople = name => o => o.userName === name
    arr.filter(findPeople('張三'))

使用高階函數(shù)可以讓代碼復用性更好,也便于維護归薛。配合es6的語法谍憔,可以讓函數(shù)變得更簡潔(當然寫不好的化也變得難于閱讀)驶冒。

5、合并數(shù)據(jù)

let arr1 = [1,2,3],arr2=[4,5,6]
如何得到[1,2,3,4,5,6]數(shù)組韵卤?
//方法1:arr1.concat(arr2)
//方法2:[...arr1,...arr2]
//方法3:arr1.push(...arr2), 此方式修改了arr1的長度,等價于:arr1.push.apply(arr1,arr2)

6崇猫、可選鏈操作符

可選鏈操作符( ?. )允許讀取位于連接對象鏈深處的屬性的值沈条,而不必明確驗證鏈中的每個引用是否有效。?. 操作符的功能類似于 . 鏈式操作符诅炉,不同之處在于蜡歹,在引用為空(nullish ) (null 或者 undefined) 的情況下不會引起錯誤,該表達式短路返回值是 undefined涕烧。與函數(shù)調用一起使用時月而,如果給定的函數(shù)不存在,則返回 undefined议纯。

let obj = {
    data: {
      name: "張三",
    },
  };
// 如果我們想取obj里data里的name字段父款,要對obj和data等字段做判空處理,不然代碼就會報錯
原始方法:const name = obj && obj.data &&  obj.data.name
改進:const name = obj?.data?.name;

7瞻凤、空值合并操作符

空值合并操作符(??)是一個邏輯操作符憨攒,當左側的操作數(shù)為 null 或者 undefined 時,返回其右側操作數(shù)阀参,否則返回左側操作數(shù)肝集。

//在處理輸入框相關業(yè)務時,往往會判斷輸入框未輸入值的場景蛛壳。
if(value !== null && value !== undefined && value !== ''){
    //...
}
//使用空值合并操作符杏瞻,如下
if((value??'') !== ''){
  //...
}

注意與 || 的區(qū)別。由于 || 是一個布爾邏輯運算符衙荐,左側的操作數(shù)會被強制轉換成布爾值用于求值捞挥。任何假值(0, ''赫模, NaN树肃, null, undefined)都不會被返回瀑罗。這導致如果你使用0胸嘴,''或NaN作為有效值,就會出現(xiàn)不可預料的后果斩祭。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末劣像,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摧玫,更是在濱河造成了極大的恐慌耳奕,老刑警劉巖绑青,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屋群,居然都是意外死亡闸婴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門芍躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邪乍,“玉大人,你說我怎么就攤上這事对竣”永悖” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵否纬,是天一觀的道長吕晌。 經(jīng)常有香客問我,道長临燃,這世上最難降的妖魔是什么睛驳? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮谬俄,結果婚禮上柏靶,老公的妹妹穿的比我還像新娘。我一直安慰自己溃论,他們只是感情好屎蜓,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著钥勋,像睡著了一般炬转。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上算灸,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天扼劈,我揣著相機與錄音,去河邊找鬼菲驴。 笑死荐吵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赊瞬。 我是一名探鬼主播先煎,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼巧涧!你這毒婦竟也來了薯蝎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谤绳,失蹤者是張志新(化名)和其女友劉穎占锯,沒想到半個月后袒哥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡消略,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年堡称,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺演。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡粮呢,死狀恐怖,靈堂內的尸體忽然破棺而出钞艇,到底是詐尸還是另有隱情,我是刑警寧澤豪硅,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布哩照,位于F島的核電站,受9級特大地震影響懒浮,放射性物質發(fā)生泄漏飘弧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一砚著、第九天 我趴在偏房一處隱蔽的房頂上張望次伶。 院中可真熱鬧,春花似錦稽穆、人聲如沸冠王。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柱彻。三九已至,卻和暖如春餐胀,著一層夾襖步出監(jiān)牢的瞬間哟楷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工否灾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卖擅,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓墨技,卻偏偏與公主長得像惩阶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子健提,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容