JavaScript は間違いなく世界で最も使用されているプログラミング言語であり、私たちの日常生活で最も重要なテクノロジーの 1 つであるインターネットに多大な影響を与えています。この権限には大きな責任が伴い、JavaScript エコシステムは急速に進化しているため、ベスト プラクティスに従うことが困難になっています。
この記事では、よりクリーンで保守しやすく効率的なコードを作成するための最新の JavaScript のトップ ベスト プラクティスをいくつか紹介します。
各プロジェクトには、コードの一貫性を維持するための特定のルールがある場合があります。これらのルールは、この記事の推奨事項を含む外部の推奨事項よりも常に優先されます。プロジェクトにプラクティスを実装する前に、それが確立されたルールに従っていること、およびチーム メンバー全員が同意していることを確認してください。
JavaScript は 1995 年の誕生以来、目覚ましい進化を遂げてきました。インターネット上で見かける古い慣例の多くは時代遅れになっている可能性があります。手法を実装する前に、その手法が言語の現在のバージョンと互換性があることを確認してください。
var はまだ有効ですが、その使用は時代遅れとみなされており、多くの場合、その機能範囲により追跡が困難なバグが発生する可能性があります。一方、 let と const は、宣言されているブロックに限定され、より予測可能で安全 スコープを提供します。
黄金律: デフォルトでは const を使用します。後で値を変更する必要がある場合は、let に切り替えます。
const PI = 3.14159; console.log(PI); // 3.14159 PI = 3; // TypeError: Assignment to constant variable.
let count = 0; for (let i = 1; i <= 3; i++) { count += i; } console.log(count); // 6
if (true) { let blockScoped = "Solo dentro del bloque"; var functionScoped = "Disponible fuera también"; } console.log(functionScoped); // "Disponible fuera también" console.log(blockScoped); // ReferenceError: blockScoped is not defined
var を使用すると、ループ、特に非同期関数で予期しない動作が発生する可能性があります。
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 3, 3, 3 }
let はこれを修正します:
const PI = 3.14159; console.log(PI); // 3.14159 PI = 3; // TypeError: Assignment to constant variable.
var を let と const に置き換えることは良い習慣であるだけでなく、コードをより安全に、より読みやすく、デバッグを容易にするにも役立ちます。ありがとうの未来を作りましょう。
JavaScript でのオブジェクト指向プログラミングに Function.prototype を使用するのは、古く、エラーが発生しやすいアプローチです。それどころか、ES6 で導入された クラス は、他のオブジェクト指向言語に近い、より直観的な構文を提供し、コードの読みやすさとメンテナンスを容易にします。
クラスを使用した例 (モダンで明確):
let count = 0; for (let i = 1; i <= 3; i++) { count += i; } console.log(count); // 6
Function.prototype との比較 (複雑で直感的ではありません):
if (true) { let blockScoped = "Solo dentro del bloque"; var functionScoped = "Disponible fuera también"; } console.log(functionScoped); // "Disponible fuera también" console.log(blockScoped); // ReferenceError: blockScoped is not defined
ご覧のとおり、プロトタイプベースのアプローチでは、メソッドを定義するためにより多くの手順が必要となり、経験の浅い開発者にとってはさらに混乱する可能性があります。クラスが読みやすいだけでなく、よりクリーンでモジュール化されたコードも促進されます。
クラスを使用する理由
長い間、JavaScript 開発者はアンダースコア (_) などの規則を使用して、クラス内のプライベート フィールドをシミュレートしていました。ただし、プロパティはクラスの外部からアクセスできるため、これは単なる視覚的な慣例でした。 本当のプライベート フィールド のおかげで、特定のプロパティが外部から完全にアクセスできないことを保証できます。
⚠️ 注意: この機能は、一部のブラウザのコンソールでは利用できない場合があります。
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 3, 3, 3 }
ページへの訪問数を記録するクラスを作成したいが、誰もそのカウンターを直接操作できないようにしたいと想像してください。
const PI = 3.14159; console.log(PI); // 3.14159 PI = 3; // TypeError: Assignment to constant variable.
この場合、#visits カウンターは外部アクセスから完全に保護されており、その値が不正に操作されないことが保証されます。
アロー関数 は、JavaScript で関数を記述するための最新かつエレガントな方法です。これらはより短い構文を提供し、従来の関数とは異なり、 は this のコンテキストを自動的に継承するため、オブジェクト指向プログラミングでよくある問題を回避できます。
これらは、関数を引数として渡す必要がある、map、filter、reduce などの高階関数で特に役立ちます。
let count = 0; for (let i = 1; i <= 3; i++) { count += i; } console.log(count); // 6
if (true) { let blockScoped = "Solo dentro del bloque"; var functionScoped = "Disponible fuera también"; } console.log(functionScoped); // "Disponible fuera también" console.log(blockScoped); // ReferenceError: blockScoped is not defined
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 3, 3, 3 }
イベントでアロー関数を使用する場合、this コンテキストは変更されないため、便利です:
for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 0, 1, 2 }
矢印関数は優れていますが、すべてに最適なわけではありません。動的 this を使用する関数や、プロトタイプにメソッドを記述する必要がある場合など、関数コンテキスト自体にアクセスする必要がある場合は、これらを避けてください。
通常の関数の方が優れている例:
class Persona { constructor(nombre) { this.nombre = nombre; } obtenerNombre() { return this.nombre; } } const persona = new Persona('Juan'); console.log(persona.obtenerNombre()); // 'Juan'
print をアロー関数に変更すると、このコンテキストが失われます。
そのセクションを改善しましょう!より完全で有用なものにするために、いくつかのコンテキスト、より明確な説明、およびいくつかの追加の例を追加しました。
null 合体演算子 (??) は、論理演算子 || のより正確な代替手段です。デフォルト値を割り当てます。一方 || "falsy" を 0、false、または "" などの値とみなし、演算子 ?? ヌルまたは未定義のみを「欠損」値として評価します。 これにより、多くの場合、より安全でより具体的なオプションになります。
|| を使用すると、「falsy」値はデフォルト値に置き換えられます。
?? を使用すると、のみ が null または未定義の値を置き換えます。これにより、コンテキスト内で有効であれば、0 や "" などの「偽」の値を保持することができます。
const PI = 3.14159; console.log(PI); // 3.14159 PI = 3; // TypeError: Assignment to constant variable.
一方、 || の場合:
let count = 0; for (let i = 1; i <= 3; i++) { count += i; } console.log(count); // 6
if (true) { let blockScoped = "Solo dentro del bloque"; var functionScoped = "Disponible fuera también"; } console.log(functionScoped); // "Disponible fuera también" console.log(blockScoped); // ReferenceError: blockScoped is not defined
オプションをカスタマイズできるシステムがあるとします。
for (var i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 3, 3, 3 }
for (let i = 0; i < 3; i++) { setTimeout(() => console.log(i), 100); // Imprime 0, 1, 2 }
以上が最新の JavaScript のベスト プラクティス - パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。