公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

[轉(zhuǎn)帖]養(yǎng)成15個(gè)好的代碼小習(xí)慣,讓老大對(duì)你刮目相看

liguoquan
2024年3月23日 8:54 本文熱度 1062
:養(yǎng)成15個(gè)好的代碼小習(xí)慣,讓老大對(duì)你刮目相看


養(yǎng)成15個(gè)好的代碼小習(xí)慣,讓老大對(duì)你刮目相看

截屏2021-08-18 下午11.04.37.png

原生JavaScript

1、三元代替if

// 普通寫法
let name = '林三心'
if (condition) {
  name = '科比'
}

// 三元表達(dá)式
let name = condition ? '林三心' : '科比'

2、多重三元表達(dá)式

// 普通寫法
let name = '林三心'
if (condition1) {
  if (condition2) {
    name = '科比'
  } else {
    name = '詹姆斯'
  }
}

// 多重三元表達(dá)式
let name = condition1 ? '林三心' : condition2 ? '科比' : '詹姆斯'

3、Map優(yōu)化多if

你是否遇到過(guò)這種代碼,其實(shí)每個(gè)if判斷題里的內(nèi)容都大致相同,如果判斷情況數(shù)量少還好,但是如果有幾百個(gè)的話,那這么寫真的太不優(yōu)雅了

// 普通寫法
var name = '林三心'
// 通過(guò)某些操作獲得code
const code = XXXXXXXXXX
if (code === 'kobe') {
  name = '科比'
else if (code = 'james') {
  name = '詹姆斯'
else if (code === 'paul') {
  name = '保羅'
else if (code === 'george') {
  name = '喬治'
else if (code === 'curry') {
  name = '庫(kù)里'
else if (code === 'durant') {
  name = '杜蘭特'
}

像上面的情況,可以用對(duì)象(習(xí)慣稱為map了)來(lái)優(yōu)化一下

// map優(yōu)化
const map = {
  kobe'科比',
  james'詹姆斯',
  paul'保羅',
  george'喬治',
  curry'庫(kù)里',
  durant'杜蘭特'
}

var name = '林三心'
// 通過(guò)某些操作獲得code
const code = XXXXXXXXXX
// 通過(guò)map查找
name = map[code]

但是問(wèn)題來(lái)了,JavaScript的對(duì)象的key只能是字符串啊,不能是其他類型,那如果遇到以下情況咋辦啊?

// 普通寫法
var name = '林三心'
// 通過(guò)某些操作獲得code
const code = XXXXXXXXXX
if (code === 1) {
  name = '一心一意'
else if (code = 2) {
  name = '雙龍戲珠'
else if (code === 3) {
  name = '三心二意'
else if (code === 4) {
  name = '四面楚歌'
else if (code === 'curry') {
  name = '庫(kù)里'
else if (code === 'durant') {
  name = '杜蘭特'
}

可以看到上面的判斷條件是數(shù)字和字符串混合的,這個(gè)時(shí)候就可以使用ES6Map對(duì)象了,Map有一個(gè)區(qū)別于普通對(duì)象的特性就是,Mapkey可以是任意類型

const map = new Map([
  [1'一心一意'],
  [2'雙龍戲珠'],
  [3'三心二意'],
  [4'四面楚歌'],
  ['curry''庫(kù)里'],
  ['durant''杜蘭特']
])
console.log(map)
// Map {
//   1 => '一心一意',
//   2 => '雙龍戲珠',
//   3 => '三心二意',
//   4 => '四面楚歌',
//   'curry' => '庫(kù)里',
//   'durant' => '杜蘭特'
// }

// 通過(guò)Map查找對(duì)應(yīng)的值
name = map.get(code)

4、多if的return

可能你代碼遇到這情況,某些條件時(shí)需要return,不執(zhí)行后續(xù)操作

// 普通做法
function fn({
  // 通過(guò)一頓操作獲得name
  const name = XXXXXXX
  if (name === '林三心') {
    // 做對(duì)應(yīng)的操作
    return
  } else if (name === '科比') {
    // 做對(duì)應(yīng)的操作
    return
  } else if (name === '詹姆斯') {
    // 做對(duì)應(yīng)的操作
    return
  } else if (name === '利拉德') {
    // 做對(duì)應(yīng)的操作
  } else if (name === '保羅') {
    // 做對(duì)應(yīng)的操作
  }

  // 后續(xù)操作
}

以前我導(dǎo)師給我說(shuō)這么做性能會(huì)好一些,說(shuō)復(fù)雜度會(huì)低一些,性能更好,但是我現(xiàn)在忘了那個(gè)名詞叫啥了哈哈,哪位大哥評(píng)論區(qū)指出一下

// 復(fù)雜度更低,性能更高
function fn({
  // 通過(guò)一頓操作獲得name
  const name = XXXXXXX
  if (name === '林三心') {
    // 做對(duì)應(yīng)的操作
    return
  }
  if (name === '科比') {
    // 做對(duì)應(yīng)的操作
    return
  }
  if (name === '詹姆斯') {
    // 做對(duì)應(yīng)的操作
    return
  }
  if (name === '利拉德') {
    // 做對(duì)應(yīng)的操作
  }
  if (name === '保羅') {
    // 做對(duì)應(yīng)的操作
  }

  // 后續(xù)操作
}

5、多個(gè)值的或條件

開(kāi)發(fā)中會(huì)遇到多個(gè)值的或條件,例如

// 普通操作

// 通過(guò)一頓操作獲得name
const name = XXXXXXX
if (name === '林三心' || name === '詹姆斯' || name === '科比' || name === '杜蘭特') {
  // 進(jìn)行對(duì)應(yīng)的操作
}

上面的寫法是有缺陷的,萬(wàn)一條件多了,那會(huì)很長(zhǎng)很長(zhǎng),不優(yōu)雅,咱們遇到這種情況,可以使用數(shù)組+includes來(lái)優(yōu)化

// 優(yōu)化操作

// 通過(guò)一頓操作獲得name
const name = XXXXXXX
if (['林三心''詹姆斯''科比''杜蘭特'].includes(name)) {
  // 進(jìn)行對(duì)應(yīng)的操作
}

6、函數(shù)執(zhí)行返回布爾值

// 普通操作
function fn(params{
  // 對(duì)傳進(jìn)來(lái)的params進(jìn)行一頓操作
  // 很多代碼
  // 得出一個(gè)key
  if (key === 1) {
    return true
  } else {
    return false
  }
}

// 直接返回布爾值
function fn(params{
  // 對(duì)傳進(jìn)來(lái)的params進(jìn)行一頓操作
  // 很多代碼
  // 得出一個(gè)key
  
  return key === 1
}

7、if判斷假值

什么是假值,就是轉(zhuǎn)布爾值為false的稱為假值,例如null,undefined,0,NaN等

// 普通操作
if (key === null) {
  // 進(jìn)行對(duì)應(yīng)操作
}

// 簡(jiǎn)寫
if (!key) {
  // 進(jìn)行對(duì)應(yīng)操作
}

8、數(shù)組過(guò)濾

前幾天有一兄弟問(wèn)我,想要把價(jià)格大于500的商品放在一個(gè)數(shù)組里,他是這么做的

// 普通操作
const arr = [
  { id1name'電視機(jī)'price999 },
  { id2name'牙刷'price100 },
  { id3name'桌子'price200 },
  { id4name'電腦桌'price500 },
  { id5name'鍵盤'price600 },
  { id6name'顯示屏'price800 }
]

const res = []

for (let i = 0; i < arr.length; i++) {
  if (arr[i].price >= 500) {
    res.push(arr[i])
  }
}
console.log(res)

// [
//   { id: 1, name: '電視機(jī)', price: 999 },
//   { id: 4, name: '電腦桌', price: 500 },
//   { id: 5, name: '鍵盤', price: 600 },
//   { id: 6, name: '顯示屏', price: 800 }
// ]

其實(shí)用數(shù)組的filter方法 + 箭頭函數(shù) + 對(duì)象解構(gòu)也就一行代碼的事情

const arr = [
  { id1name'電視機(jī)'price999 },
  { id2name'牙刷'price100 },
  { id3name'桌子'price200 },
  { id4name'電腦桌'price500 },
  { id5name'鍵盤'price600 },
  { id6name'顯示屏'price800 }
]

const res = arr.filter(({ price }) => price >= 500)
console.log(res)
// [
//   { id: 1, name: '電視機(jī)', price: 999 },
//   { id: 4, name: '電腦桌', price: 500 },
//   { id: 5, name: '鍵盤', price: 600 },
//   { id: 6, name: '顯示屏', price: 800 }
// ]

Vue

9、不需要響應(yīng)式的數(shù)據(jù)

不需要響應(yīng)式的數(shù)據(jù),也就是死數(shù)據(jù),建議不要放在對(duì)象里,放在對(duì)象里他會(huì)進(jìn)行響應(yīng)式處理,浪費(fèi)性能

  data() {
    // 放在這
    this.selects = [
      {label'選項(xiàng)一'value1},
      {label'選項(xiàng)二'value2},
      {label'選項(xiàng)三'value3}
    ]
    return { };
  }

10、數(shù)據(jù)處理完再掛載到data里

    fn() {
      const arr = [1352385]
      const filterArr = arr.filter(num => num > 3)
      this.res = filterArr
      const sortArr = filterArr.sort()
      this.res = sortArr()
    }
    
    
    
     fn() {
      const arr = [1352385]
      const res = arr.filter(num => num > 3).sort()
      this.res = res
    }

11、按鈕加loading

給按鈕加loading,防止用戶請(qǐng)求還沒(méi)回來(lái)時(shí),重復(fù)點(diǎn)擊

<el-button :loading="loading" @click="fn"></el-button>

fn() {
    this.loading = true
    /
/ 進(jìn)行請(qǐng)求操作
    this.loading = false
}

12、文本框加防抖

文本框如果不加防抖,是非常耗性能的,要養(yǎng)成一看到文本框,就自覺(jué)加防抖的好習(xí)慣

<el-input @input="fn" />

import { debounce } from "@tools";
fn: debounce(function ({
        // 做相應(yīng)的事
    }, 300)
    
    
// tools
/**
 * 防抖函數(shù)
 * @param {Function} fn 回調(diào)函數(shù)
 * @param {Number} delay 時(shí)長(zhǎng)
 */

export const debounce = (fn, delay) => {
    var timer;
    return function ({
        var args = arguments;
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            fn.apply(this, args); // this 指向vue
        }, delay);
    };

}

13、定時(shí)器以及事件的清除

定時(shí)器和事件,在組件銷毀的時(shí)候需要清除一下,因?yàn)檫@些東西都是全局的,組件銷毀后,他們還存在內(nèi)存中,會(huì)造成內(nèi)存泄漏的問(wèn)題

export default{
  data(){
    timer:null  
  },
  mounted(){
      this.timer = setInterval(()=>{
      //具體執(zhí)行內(nèi)容
      console.log('1');
        },1000);
  }
  beforeDestory(){
    clearInterval(this.timer);
    this.timer = null;
  }
}

當(dāng)然我們可以使用hook來(lái)優(yōu)化

export default{
  methods:{
    fn(){
      let timer = setInterval(()=>{
        //具體執(zhí)行代碼
        console.log('1');
      },1000);
      this.$once('hook:beforeDestroy',()=>{
        clearInterval(timer);
        timer = null;
      })
    }
  }
}

14、html中的v-if

也許你碰到過(guò)這種多個(gè)條件的v-if

<div v-if="name === '林三心' && age === 22 && state === 1"></div>

上面那么寫真的不優(yōu)雅,也不好調(diào)試,利用computed

<div v-if="show"></div>

computed: {
    show () {
        /
/ 在這里可以調(diào)試
        return this.name === '林三心' && this.age === 22 && this.state === 1
    }
}

小程序

15、多次setData合并

咱們先對(duì)比下setDta和react的setState

  • setState:多次設(shè)置時(shí),會(huì)通過(guò)自動(dòng)合并來(lái)優(yōu)化性能,是異步的
  • setData:沒(méi)有優(yōu)化,設(shè)置一次,就賦值一次,是同步的

我舉個(gè)例子哈

先看setState,他是做了性能優(yōu)化的

this.setState({
    name'林三心'
})
this.setState({
    age22
})
this.setState({
    gender'男'
})

// 會(huì)自動(dòng)合并成,性能優(yōu)化
this.setState({
    name'林三心',
    age22,
    gender'男'
})

但是小程序的setData是沒(méi)有上面的優(yōu)化的,所以咱們要自己手動(dòng)合并一次,優(yōu)化性能

const model = { name'林三心' }

if (condition1) {
    model.age = 22
}
if (condition2) {
    model.gender = '男'
}

// 最后一次性setData
this.setData(model)



該文章在 2024/3/23 8:54:22 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产成人午夜无码电影在线观看 | 国产精品视频网站 | 国产亚洲人成在线影院 | 精品无码日韩国产不卡aⅴ 精品无码日韩国产不卡av | 国产精品日韩在线 | 91福利在线精品国产 | 高潮插的我好爽再干噢在线欢看 | 91精品隔壁老王在线观看 | 国产成人无码免费网站 | 精品国内自产拍在线观看视频 | 91日韩精品久久久久精品无码 | 波多野结衣一区二区三区在线观看 | av免费播放| 国产亚洲综合另类无码 | 国产av+高潮 | 国产精品无码久久四虎 | 国产一区二区在线视频播放 | 国产在线视频福利资源站 | 97人人添人人澡人人澡人人澡 | 成人免费播放网站 | 91网红福利精品区一区二 | 国产私人尤物无码不卡 | 91a国产精品视频 | 国产三级不卡在线观看 | 国产午夜福利在线观看 | 国产欧美成人免费观看视频 | 国产成人久久精品二区三区牛 | 国产午夜精品久久久久九九 | 国产妇女馒头高清泬 | 精品少妇无码v无码专区 | 成人精品丝袜在线一区 | 国产二三区国产一级淫片a 国产二三无码区 | 国产成人无码av片在线观看 | 2025精品久久久久精品免费网 | 国产aⅴ视频一区二区三区 国产aⅴ熟女 | 成人精品一区二区久久 | 国产成人自拍视频在线观看 | 国产蜜桃一区二区三区在线观看 | 成人一区二区三区免费看 | 国产一区二区三区四区五区加勒比 | 国产一级内谢a级高清毛片古装 |