ホームページ ウェブフロントエンド jsチュートリアル JavaScript 初心者向けのベスト プラクティス

JavaScript 初心者向けのベスト プラクティス

Nov 22, 2016 pm 01:22 PM
javascript

1. ==

の代わりに === を使用する JavaScript では、===|!== と ==|!= の 2 つの異なる等価演算子を使用します。比較演算では前者を使用することをお勧めします。

「両側のオペランドの型と値が同じ場合、=== は true を返し、!== は false を返します。」 - 『JavaScript: 言語の本質』

ただし、== と!== を使用する場合は、 = の場合、型が異なる状況が発生する可能性があります。この場合、オペランドの型が強制的に同じになって比較されるため、期待した結果が得られない可能性があります。

2.Eval=Evil

最初は慣れない場合、「eval」を使用すると JavaScript コンパイラにアクセスできます (注釈: これは非常に強力であるようです)。基本的に、実行中に文字列をパラメーターとして eval に渡すことができます。

これは、スクリプトのパフォーマンスを大幅に低下させるだけでなく (注釈: JIT コンパイラーは文字列の内容を予測できず、プリコンパイルと最適化もできません)、実行されるテキストに対する支払いが非常に高額であるため、多大なセキュリティ リスクももたらします。権威が高すぎるので、近づかないでください。

3. 省略しても問題は解決しない可能性があります

技術的には、ほとんどの中括弧とセミコロンを省略できます。ほとんどのブラウザは次のコードを正しく理解します:

if(someVariableExists) 
    x = false
ログイン後にコピー

次に、次のようになった場合:

if(someVariableExists) 
    x = false 
    anotherFunctionCall();
ログイン後にコピー

上記のコードは次のコードと同等であると考える人もいるかもしれません:

if(someVariableExists) { 
    x = false; 
    anotherFunctionCall(); 
}
ログイン後にコピー

残念ながら、この理解は間違っています。実際の意味は次のとおりです:

if(someVariableExists) { 
    x = false; 
} 
anotherFunctionCall();
ログイン後にコピー

上のインデントが中括弧のように見えやすいことに気づいたかもしれません。当然のことですが、これはひどい行為であり、何としても避けるべきです。中括弧を省略できるケースは 1 つだけ、つまり 1 行しかない場合ですが、これについては議論の余地があります。

if(2 + 2 === 4) return 'nicely done';
ログイン後にコピー

雨の日の計画を立てましょう

おそらく、いつか if ブロックにさらにステートメントを追加する必要が生じるでしょう。この場合、このコードを書き直す必要があります。結論 – 省略は地雷原です。

4. JSLint を使用する

JSLint は、有名な Douglas Crockford によって作成されたデバッガーです。コードを JSLint に貼り付けるだけで、コード内の明らかな問題やエラーがすぐに見つかります。

「JSLint は入力ソース コードをスキャンします。問題が見つかった場合は、問題を説明するメッセージとコード内の位置を返します。問題は必ずしも構文エラーではありませんが、構文エラーである場合もよくあります。JSLint はエンコーディングも調べます。スタイルとプログラム構造の問題。これはプログラムが正しいことを保証するものではありません。問題を見つけるのに役立つ別の目を提供するだけです。」 - JSLing Documentation

スクリプトをデプロイする前に、JSLint を実行してください。それは愚かな間違いです。

5. スクリプトをページの下部に配置します

覚えておいてください。主な目的は、ページをできるだけ早くユーザーに表示することです。スクリプトの読み込みはブロックされるまで続行できません。スクリプトがロードされ、以下のコンテンツが実行されます。そのため、ユーザーはより長い待ち時間を余儀なくされることになります。

js が効果を高めるためだけに使用されている場合 (ボタンのクリック イベントなど)、本文の終わりの直前にスクリプトをすぐに配置します。これは間違いなくベストプラクティスです。

推奨事項

<p>And now you know my favorite kinds of corn. </p> 
<script type="text/javascript" src="path/to/file.js"></script> 
<script type="text/javascript" src="path/to/anotherFile.js"></script> 
</body> 
</html>
ログイン後にコピー

6. For ステートメント内での変数の宣言は避けてください

長い for ステートメントを実行する場合は、ステートメント ブロックをできるだけ簡潔にしてください。例:

おっと

for(var i = 0; i < someArray.length; i++) { 
    var container = document.getElementById(&#39;container&#39;); 
    container.innerHtml += &#39;my number: &#39; + i; 
    console.log(i); 
}
ログイン後にコピー

配列は毎回計算する必要があることに注意してください。ループする時間の長さが長く、「container」要素をクエリするために毎回 DOM を走査する必要があるため、効率は非常に低いです。

提案

var container = document.getElementById(&#39;container&#39;); 
for(var i = 0, len = someArray.length; i < len; i++) { 
    container.innerHtml += &#39;my number: &#39; + i; 
    console.log(i); 
}
ログイン後にコピー

ご興味がございましたら、上記のコードを引き続き最適化する方法を検討してください。コメントを残して共有してください。

7. 文字列を構築する最良の方法

配列やオブジェクトを走査する必要があるときは、常に「for」ステートメントについて考える必要はありません。たとえば、次のようなより良い方法を常に見つけることができます。次の。

rreee

私はあなたの心の中の神ではありませんが、私を信じてください (信じられない場合は自分で試してください) - これが断然最速の方法です!システムが内部で何を行うかに関係なく、ネイティブ コード (join() など) を使用すると、通常は非ネイティブ コードよりもはるかに高速になります。 ——James Padolsey、james.padolsey.com

8. グローバル変数を減らす

複数のグローバル変数が 1 つの名前空間の下に編成されている限り、他のアプリケーション、コンポーネント、またはクラス ライブラリとの相互影響の可能性が大幅に減少します。 。 ——Douglas Crockford

var arr = [&#39;item 1&#39;, &#39;item 2&#39;, &#39;item 3&#39;, ...]; 
var list = &#39;<ul><li>&#39; + arr.join(&#39;</li><li>&#39;) + &#39;</li></ul>&#39;;
ログイン後にコピー

より良いアプローチ

var name = &#39;Jeffrey&#39;; 
var lastName = &#39;Way&#39;; 
function doSomething() {...} 
console.log(name); // Jeffrey -- 或 window.name
ログイン後にコピー

注: これは単に「DudeNameSpace」という名前ですが、実際には、より合理的な名前を使用する必要があります。

9. コードにコメントを追加します

似乎没有必要,当请相信我,尽量给你的代码添加更合理的注释。当几个月后,重看你的项目,你可能记不清当初你的思路。或者,假如你的一位同事需要修改你的代码呢?总而言之,给代码添加注释是重要的部分。

// 循环数组,输出每项名字(译者注:这样的注释似乎有点多余吧). 
for(var i = 0, len = array.length; i < len; i++) { 
     console.log(array[i]); 
}
ログイン後にコピー

10.拥抱渐进增强

确保javascript被禁用的情况下能平稳退化。我们总是被这样的想法吸引,“大多数我的访客已经启用JavaScript,所以我不必担心。”然而,这是个很大的误区。

你可曾花费片刻查看下你漂亮的页面在javascript被关闭时是什么样的吗?(下载 Web Developer 工具就能很容易做到(译者注:chrome用户在应用商店里自行下载,ie用户在Internet选项中设置)),这有可能让你的网站支离破碎。作为一个经验法则,设计你的网站时假设JavaScript是被禁用的,然后,在此基础上,逐步增强你的网站。

11.不要给”setInterval”或”setTimeout”传递字符串参数

考虑下面的代码:

setInterval( 
    "document.getElementById(&#39;container&#39;).innerHTML += &#39;My new number: &#39; + i", 3000 
);
ログイン後にコピー

不仅效率低下,而且这种做法和”eval”如出一辙。从不给setInterval和setTimeout传递字符串作为参数,而是像下面这样传递函数名。

setInterval(someFunction, 3000);
ログイン後にコピー

12.不要使用”with”语句

乍一看,”with”语句看起来像一个聪明的主意。基本理念是,它可以为访问深度嵌套对象提供缩写,例如……

with (being.person.man.bodyparts) { 
    arms = true; 
    legs = true; 
}
ログイン後にコピー

而不是像下面这样:

being.person.man.bodyparts.arms = true; 
being.person.man.bodyparts.legs= true;
ログイン後にコピー

不幸的是,经过测试后,发现这时“设置新成员时表现得非常糟糕。作为代替,您应该使用变量,像下面这样。

var o = being.person.man.bodyparts; 
o.arms = true; 
o.legs = true;
ログイン後にコピー

13.使用{}代替 new Ojbect()

在JavaScript中创建对象的方法有多种。可能是传统的方法是使用”new”加构造函数,像下面这样:

var o = new Object(); 
o.name = &#39;Jeffrey&#39;; 
o.lastName = &#39;Way&#39;; 
o.someFunction = function() { 
    console.log(this.name); 
}
ログイン後にコピー

然而,这种方法的受到的诟病不及实际上多。作为代替,我建议你使用更健壮的对象字面量方法。

更好的做法

var o = { 
    name: &#39;Jeffrey&#39;, 
    lastName = &#39;Way&#39;, 
    someFunction : function() { 
        console.log(this.name); 
    } 
};
ログイン後にコピー

注意,果你只是想创建一个空对象,{}更好。

var o = {};
ログイン後にコピー

“对象字面量使我们能够编写更具特色的代码,而且相对简单的多。不需要直接调用构造函数或维持传递给函数的参数的正确顺序,等”——dyn-web.com

14.使用[]代替 new Array()

这同样适用于创建一个新的数组。

例如:

var a = new Array(); 
a[0] = "Joe"; 
a[1] = &#39;Plumber&#39;;
ログイン後にコピー

更好的做法:

var a = [&#39;Joe&#39;,&#39;Plumber&#39;];
ログイン後にコピー

“javascript程序中常见的错误是在需要对象的时候使用数组,而需要数组的时候却使用对象。规则很简单:当属性名是连续的整数时,你应该使用数组。否则,请使用对象”——Douglas Crockford

15.定义多个变量时,省略var关键字,用逗号代替

var someItem = &#39;some string&#39;; 
var anotherItem = &#39;another string&#39;; 
var oneMoreItem = &#39;one more string&#39;;
ログイン後にコピー

更好的做法

var someItem = &#39;some string&#39;, 
    anotherItem = &#39;another string&#39;, 
    oneMoreItem = &#39;one more string&#39;;
ログイン後にコピー

…应而不言自明。我怀疑这里真的有所提速,但它能是你的代码更清晰。

16.谨记,不要省略分号

从技术上讲,大多数浏览器允许你省略分号。

var someItem = &#39;some string&#39; 
function doSomething() { 
    return &#39;something&#39; 
}
ログイン後にコピー

已经说过,这是一个非常糟糕的做法可能会导致更大的,难以发现的问题。

更好的做法

var someItem = &#39;some string&#39;; 
function doSomething() { 
    return &#39;something&#39;; 
}
ログイン後にコピー

17.”For in”语句

当遍历对象的属性时,你可能会发现还会检索方法函数。为了解决这个问题,总在你的代码里包裹在一个if语句来过滤信息。

for(key in object) { 
    if(object.hasOwnProperty(key) { 
        ...then do something... 
    } 
}
ログイン後にコピー

参考 JavaScript:语言精粹,道格拉斯(Douglas Crockford)。

18.使用Firebug的”timer”功能优化你的代码

在寻找一个快速、简单的方法来确定操作需要多长时间吗?使用Firebug的“timer”功能来记录结果。

function TimeTracker(){ 
    console.time("MyTimer"); 
    for(x=5000; x > 0; x--){} 
    console.timeEnd("MyTimer"); 
}
ログイン後にコピー

19.阅读,阅读,反复阅读

虽然我是一个巨大的web开发博客的粉丝(像这样!),午餐之余或上床睡觉之前,实在没有什么比一本书更合适了,坚持放一本web开发方面书在你的床头柜。下面是一些我最喜爱的JavaScript书籍。

《Object-Oriented JavaScript | JavaScript面向对象编程指南》

《JavaScript:The Good Parts | JavaScript语言精粹 修订版》

《Learning jQuery 1.3 |jQuery基础教程 第4版》

《Learning JavaScript |JavaScript学习指南》

读了他们……多次。我仍将继续!

20.自执行函数

和调用一个函数类似,它很简单的使一个函数在页面加载或父函数被调用时自动运行。简单的将你的函数用圆括号包裹起来,然后添加一个额外的设置,这本质上就是调用函数。

(function doSomething() { 
    return { 
        name: &#39;jeff&#39;, 
        lastName: &#39;way&#39; 
    }; 
})();
ログイン後にコピー

21.原生代码永远比库快

JavaScript库,例如jQuery和Mootools等可以节省大量的编码时间,特别是AJAX操作。已经说过,总是记住,库永远不可能比原生JavaScript代码更快(假设你的代码正确)。

jQuery的“each”方法是伟大的循环,但使用原生”for”语句总是更快。

22.道格拉斯的 JSON.Parse

尽管JavaScript 2(ES5)已经内置了JSON 解析器。但在撰写本文时,我们仍然需要自己实现(兼容性)。道格拉斯(Douglas Crockford),JSON之父,已经创建了一个你可以直接使用的解析器。这里可以下载(链接已坏,可以在这里查看相关信息http://www.json.org/)。

只需简单导入脚本,您将获得一个新的全局JSON对象,然后可以用来解析您的json文件。

var response = JSON.parse(xhr.responseText); 
var container = document.getElementById(&#39;container&#39;); 
for(var i = 0, len = response.length; i < len; i++) { 
    container.innerHTML += &#39;<li>&#39; + response[i].name + &#39; : &#39; + response[i].email + &#39;</li>&#39;; 
}
ログイン後にコピー


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles