JavaScript コードの 7 つの悪い習慣を共有してください。あなたも同じかどうか確認してください。

e73e50b46b47fb7565fd5765ea5e7537.jpeg

英文 | https://javascript.plainenglish.io/say-goodbye-to-7-bad-javascript-practices-1de41ca57f0a

私はこれまで働いてきた中で、ひどいコードをたくさん書いてきたので、それをよく知っています。

私の同僚はいつも私のコードを臭いコードだと思っていますが、彼らは私の芸術性を評価していないと思います。そこで今日は私が以前に踏んだ落とし穴を要約し、皆さんがこうした悪い操作を避ける手助けになれば幸いです。

1. コードを 1 行で書いてみます

あら!あなたの同僚になっていただけませんか?

たった 1 行のコードで Web ページのすべての Cookie をクリアしました。すごいと思いませんか?

document.cookie.split(';').forEach(cookie => document.cookie = cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`))

おお!私を許してください!読みやすさはまったくありません。頭が痛くなってきました。おそらくこのようにしたほうがよいでしょう。

const cookies = document.cookie.split(';')
cookies.forEach(cookie => {
  cookie = cookie.replace(/^ +/, '') // 
  cookie = cookie.replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`)
  document.cookie = cookie
})

2. コンソールにエラーを表示する

このコーディングの習慣はありますか? リクエストの成功ステータスのみに注意を払い、失敗したリクエストは無視してください。

デバッグの目的で、私は常にコンソールにエラー メッセージを出力します。

try {
  fetch(url, {
    method: 'post',
    ...
  })
} catch (err) {
  // When the request goes wrong, we don't have any perception
  console.log(err)
}

おそらく、エラーが発生したというわかりやすい警告メッセージをユーザーに提供する必要があるでしょう。

try {
  fetch(url, {
    method: 'post',
    ...
  })
} catch (err) {
  Toast(err.message)
}

3. マジックナンバーを使用する

この魔法の数字を何度も見たことがあると思いますが、実際には何を意味するのでしょうか?

おそらく彼の最初の著者だけがそれを理解できるでしょう!

// index1.js
if (status === 1 || status === 2) {
  // ...
} else if (status === 3) {
  // ...
}


// index2.js
if (status === 1 || status === 2) {
  // ...
}

定数を定義してその意味を表すことができ、明確で簡潔なコメントを追加できれば便利です。

const STATUS = {
  // It is an adult and has real-name authentication
  adultRealName: 1,
  // It is a minor and has real-name authentication
  minorRealName: 2,
  // Not real-name authentication
  notRealName: 3,
  // ...
}


// index1.js
if ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {
  // ...
} else if (status === STATUS.notRealName) {
  // ...
}
// index2.js
if ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {
  // ...
}

4. コールバック関数の悪用

今は 2023 年です。これ以上コールバックを乱用すべきではありません。これは恐ろしいことです。

私たちは非常に若いフロントエンド開発エンジニアのようです。

fetch('/a')
  .then((a) => {
    fetch('/b', { a })
      .then((b) => {
        fetch('/c', { b })
          .then((c) => {
            console.log(c)
          })
      })
  })

JavaScript には await キーワードが用意されているので、上記のコードを簡略化してみましょう。

const a = await fetch('/a')
const b = await fetch('/b', { a })
const c = await fetch('/c', { b })


console.log(c)

すごい、これによりコードがよりシンプルになり、読みやすく、保守しやすくなります。

5. 10個のパラメータを関数に設定します

ちょっと大袈裟かもしれませんが、まあ、何が言いたいかというと、多くの引数を渡すように関数を設計すると可読性が悪く、使い方もわかりにくくなるということです。

たとえば、この例では、めまいがして、正しい値を渡す方法がわかりません。

const getUser = (name, weight, mobile, gender, address, hobby, ...) => {
  // ...
  return ...
}


getUser('fatfish', 100, 183, ....)

getUser を再発明する必要があります。そうです、オブジェクトを使用して必要な情報を渡すと、専門家のように見えます。

const getUser = (options) => {
  const { name, weight, mobile, gender, address, hobby, ... } = options
  // ...
  return ...
}


getUser({
  name: 'fatfish',
  weight: 100,
  mobile: 183
  ...
})

6. + 記号を使用して文字列を数値に変換します

+ 記号のみを使用して文字列を数値に変換するのは、非常に簡単に見えます。

const str = '123456'
const num = +str


console.log(num) // 123456

ただし、Number または parseInt を使用する方が、よりセマンティックで明確な選択となるはずです。なぜなら、数値化することが目的であることが分かるからです。

const str = '123456'
const num1 = Number(str)
const num3 = parseInt(str)


console.log({ num1, num2 }) // { "num1": 123456, "num2": 123456 }

7.node_modulesのコードを直接変更します。

おお!これはとんでもないことでしょう。node_modules のコードを直接変更して 3 番目の npm パッケージを解決します。これは git によって無視されているため、コンピューター上にはその部分だけが残っています。

その後、プロジェクトが他の部門に引き継がれた後、私が修正した問題が再び発生しました...

// .gitignore
node_modules/
dist/
// ...

最後に書きます

皆さん、これらの悪い操作がまだ残っている場合は、時間内に調整してください。その他の JavaScript の悪い習慣が残っている場合は、忘れずに時間内に修正してください。同時に、自分が踏んだ穴を踏んでも構いません。オンにして、メッセージ エリアでお知らせください。より多くの人がこれらの落とし穴を回避できるように、みんなで共有して、一緒に学び、進歩しましょう。

もっとスキルを学ぶ

以下の公開番号をクリックしてください

e01b06abfdf6e729b251cfab8eb66be7.gif

おすすめ

転載: blog.csdn.net/Ed7zgeE9X/article/details/130857923