検索
ホームページ見出し高品質なJSコードの書き方

高品質なJSコードの書き方

Jan 09, 2018 am 09:24 AM
javascript高品質

この記事では主に、高品質の JS コードを作成するための 12 の方法を説明します。この利便性が必要な友人は参照してください。このセクションを学習した後、より良い js コードを作成できることを願っています。

高品質の JS コードを作成すると、プログラマーが見やすくなるだけでなく、プログラムの実行速度も向上します。

1. メンテナンス可能なコードの書き方

この時点では、問題を解決する 4 つの方法がまだ頭の中にはっきりと残っています。そうしないと、他のタスクに移るか、一定時間が経過するとバグが発生し、しばらくしてコードを確認すると、次のことが必要になります。

1. 時間をかけて問題を学習し、理解する 2.解決すべき問題コードを理解するのが最善の時期です

特に大規模なプロジェクトや企業の場合、別の問題があります。バグを修正する人はコードを書いた人ではありません (そしてバグを発見した人でもありません)バグを修正した人は同一人物ではありません)。したがって、以前に自分が書いたコードであっても、チームの他のメンバーが書いたコードであっても、コードを理解するのにかかる時間を短縮することが重要です。これは収益 (収益) と開発者の幸福に関わるものです。なぜなら、レガシー コードの保守に何時間も何日も費やすのではなく、新しくエキサイティングなものを構築する必要があるからです。したがって、保守可能なコードを作成することが重要です。一般に、保守可能なコードには次の原則があります:

可読性

一貫性

予測可能性

同じ人によって書かれたように見える

が文書化されている

2グローバル変数の問題

グローバル変数の問題は、JavaScript アプリケーションと Web ページのすべてのコードがこれらのグローバル変数を共有し、それらが同じグローバル名前空間に存在することです。つまり、プログラムの 2 つの異なる部分がグローバル変数を定義する場合です。同じ名前でも機能が異なる場合、名前の競合は避けられません。 Web ページには、ページの開発者によって記述されていないコードが含まれることもよくあります。例:

サードパーティの JavaScript ライブラリ

広告主のスクリプト コード

サードパーティのユーザー追跡および分析スクリプト コード

さまざまなタイプのウィジェット、ロゴ、ボタン

たとえば、サードパーティのスクリプトは A という名前のグローバル変数を定義し、関数内でも A という名前のグローバル変数を定義します。その結果、後の変数によって前の変数が上書きされ、サードパーティのスクリプトが突然無効になります。そしてそれをデバッグするのは困難です。

つまり: 名前空間モードや自動的にすぐに実行される関数など、グローバル変数の使用をできるだけ少なくすることが重要ですが、グローバル変数を最小限に抑えるために最も重要なことは、常に var を使用して変数を宣言することです。

3. var の副作用を忘れてください

暗黙的なグローバル変数と明示的に定義されたグローバル変数の間には小さな違いがあり、それは、delete 演算子を使用して変数を未定義のままにする機能です。詳細は以下の通りです:

varで作成したグローバル変数(関数以外のプログラムで作成したもの)は削除できません。

var を介して作成されていない暗黙的なグローバル変数 (関数内で作成されたかどうかに関係なく) は削除できます。

つまり、暗黙的なグローバル変数は実際にはグローバル変数ではなく、グローバル オブジェクトのプロパティです。属性は delete 演算子で削除できますが、変数は削除できません。具体的なコードは書きません。

4. グローバル オブジェクトにアクセスします

ブラウザでは、window 属性を介してコード内のどこからでもグローバル オブジェクトにアクセスできます (window という名前のローカル変数を宣言するなど、とんでもないことをしない限り)。ただし、他のコンテキストでは、この便利なプロパティは別の名前で呼ばれる場合があります (またはプログラムで使用できない場合もあります)。ハードコーディングされたウィンドウ識別子を使用せずにグローバル オブジェクトにアクセスする必要がある場合は、任意のレベルの関数スコープで次の操作を実行できます:

var global = (function () { return this; }());

5. for ループ

for ループでは、配列をループできます。または 引数や HTMLCollection オブジェクトなどの配列のようなオブジェクトの値です。通常のループ形式は次のとおりです:

// 次善のループ for (var i = 0; i

この形式のループ欠点は、ループするたびに配列の長さを取得する必要があることです。これにより、特に myarray が配列ではなく HTMLCollection オブジェクトである場合に、コードが削減されます。

6. 組み込みプロトタイプを拡張しないでください

コンストラクターのプロトタイプ属性を拡張することは、機能を向上させる非常に強力な方法ですが、場合によっては強力すぎる場合があります。組み込みのコンストラクター プロトタイプ (Object()、Array()、または Function() など) を追加したくなる誘惑にかられますが、コードが予測不能になるため、保守性が大幅に低下します。あなたのコードを使用する他の開発者は、おそらく、あなたが追加したメソッドではなく、組み込みの JavaScript メソッドを使用して継続的に動作することを好むでしょう。さらに、プロトタイプに追加されたプロパティにより、hasOwnProperty 属性が使用されていないときにプロトタイプがループ内に表示される可能性があり、混乱を引き起こす可能性があります。

7. 暗黙的な型変換を避ける

JavaScript的变量在比较的时候会隐式类型转换。这就是为什么一些诸如:false == 0 或 “” == 0 返回的结果是true。为避免引起混乱的隐含类型转换,在你比较值和表达式类型的时候始终使用===和!==操作符。

var zero = 0; if (zero === false) { // 不执行,因为zero为0, 而不是false } // 反面示例 if (zero == false) { // 执行了... }

八、避免eval()

如果你现在的代码中使用了eval(),记住该咒语“eval()是魔鬼”。此方法接受任意的字符串,并当作JavaScript代码来处理。当有 问题的代码是事先知道的(不是运行时确定的),没有理由使用eval()。如果代码是在运行时动态生成,有一个更好的方式不使用eval而达到同样的目 标。例如,用方括号表示法来访问动态属性会更好更简单:

// 反面示例 var property = "name"; alert(eval("obj." + property)); // 更好的 var property = "name"; alert(obj[property]);

使用eval()也带来了安全隐患,因为被执行的代码(例如从网络来)可能已被篡改。这是个很常见的反面教材,当处理Ajax请求得到的JSON 相应的时候。在这些情况下,最好使用JavaScript内置方法来解析JSON相应,以确保安全和有效。若浏览器不支持JSON.parse(),你可 以使用来自JSON.org的库。

同样重要的是要记住,给setInterval(), setTimeout()和Function()构造函数传递字符串,大部分情况下,与使用eval()是类似的,因此要避免。在幕后,JavaScript仍需要评估和执行你给程序传递的字符串:

// 反面示例 setTimeout("myFunc()", 1000); setTimeout("myFunc(1, 2, 3)", 1000); // 更好的 setTimeout(myFunc, 1000); setTimeout(function () { myFunc(1, 2, 3); }, 1000);

使用新的Function()构造就类似于eval(),应小心接近。这可能是一个强大的构造,但往往被误用。如果你绝对必须使用eval(),你 可以考虑使用new Function()代替。有一个小的潜在好处,因为在新Function()中作代码评估是在局部函数作用域中运行,所以代码中任何被评估的通过var 定义的变量都不会自动变成全局变量。另一种方法来阻止自动全局变量是封装eval()调用到一个即时函数中。

考虑下面这个例子,这里仅un作为全局变量污染了命名空间。

console.log(typeof un); // "undefined" console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined" var jsstring = "var un = 1; console.log(un);"; eval(jsstring); // logs "1" jsstring = "var deux = 2; console.log(deux);"; new Function(jsstring)(); // logs "2" jsstring = "var trois = 3; console.log(trois);"; (function () { eval(jsstring); }()); // logs "3" console.log(typeof un); // number console.log(typeof deux); // "undefined" console.log(typeof trois); // "undefined"

另一间eval()和Function构造不同的是eval()可以干扰作用域链,而Function()更安分守己些。不管你在哪里执行 Function(),它只看到全局作用域。所以其能很好的避免本地变量污染。在下面这个例子中,eval()可以访问和修改它外部作用域中的变量,这是 Function做不来的(注意到使用Function和new Function是相同的)。

(function () { var local = 1; eval("local = 3; console.log(local)"); // logs "3" console.log(local); // logs "3" }()); (function () { var local = 1; Function("console.log(typeof local);")(); // logs undefined

九、编码规范

建立和遵循编码规范是很重要的,这让你的代码保持一致性,可预测,更易于阅读和理解。一个新的开发者加入这个团队可以通读规范,理解其它团队成员书写的代码,更快上手干活。

十、缩进

代码没有缩进基本上就不能读了。唯一糟糕的事情就是不一致的缩进,因为它看上去像是遵循了规范,但是可能一路上伴随着混乱和惊奇。重要的是规范地使用缩进。

十一、注释

你必须注释你的代码,即使不会有其他人向你一样接触它。通常,当你深入研究一个问题,你会很清楚的知道这个代码是干嘛用的,但是,当你一周之后再回来看的时候,想必也要耗掉不少脑细胞去搞明白到底怎么工作的。

很显然,注释不能走极端:每个单独变量或是单独一行。但是,你通常应该记录所有的函数,它们的参数和返回值,或是任何不寻常的技术和方法。要想到注 释可以给你代码未来的阅读者以诸多提示;阅读者需要的是(不要读太多的东西)仅注释和函数属性名来理解你的代码。例如,当你有五六行程序执行特定的任务, 如果你提供了一行代码目的以及为什么在这里的描述的话,阅读者就可以直接跳过这段细节。没有硬性规定注释代码比,代码的某些部分(如正则表达式)可能注释 要比代码多。

十二、花括号{}

花括号(亦称大括号,下同)应总被使用,即使在它们为可选的时候。技术上将,在in或是for中如果语句仅一条,花括号是不需要的,但是你还是应该总是使用它们,这会让代码更有持续性和易于更新。

相关推荐:

如何编写高质量JS代码_基础知识

如何编写高质量JS代码(续)_javascript技巧

JSコードを美しく、読みやすくする方法_基礎知識

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境