web-dev-qa-db-ja.com

すべてのJavaScriptプログラマーは何を知っているべきですか?

すべてのJavaScriptプログラマーが「JavaScriptを知っている」と言うために知っておくべきことはありますか?

368
gath

jQueryではありません。ゆいじゃない。しない(など)

フレームワークは便利かもしれませんが、JavaScriptとDOMが実際にどのように機能するかについて、時々見苦しい詳細が隠されています。 「私はJavaScriptを知っています」と言うことができるようにすることを目的とする場合、フレームワークに多くの時間を投資することは反対です。

JavaScriptの機能の一部を以下に示します。これらの機能は、何をしているのかを理解するために知っておくべきですが、多くの人にはすぐにはわかりません。

  • object.propobject['prop']は同じものです(したがって、evalの使用をやめてください、ありがとう)。そのオブジェクトプロパティは常に文字列です(配列の場合でも)。 for...inの目的 (および 何ではない )。

  • プロパティスニッフィング; undefinedとは(および 理由 );一見あまり知られていないin演算子が有益で、typeof/undefinedチェックとは異なる理由; hasOwnProperty; deleteの目的。

  • Numberデータ型が実際にフロートであること。フロートを使用する言語に依存しない困難。 parseInt 8進トラップを回避します。

  • ネストされた関数のスコープ。偶発的なグローバルを回避したいスコープでvarを使用する必要性。スコープをクロージャーに使用する方法。 閉ループ問題

  • グローバル変数とwindowプロパティの衝突方法。グローバル変数とドキュメント要素が衝突するのではなく、IEでどのように衝突するか。これを避けるためにグローバルスコープでもvarを使用する必要性。

  • functionステートメントが「 hoist 」に先行するコードの前にどのように動作するか。関数ステートメントと関数式の違い。名前付き関数式 使用しないでください

  • コンストラクター関数、prototypeプロパティ、およびnew演算子が実際に機能する方法。 メソッド これを利用して、実際に必要な通常のクラス/サブクラス/インスタンスシステムを作成します。プロトタイピングの代わりにクロージャーベースのオブジェクトを使用する場合。 (これに関するJSチュートリアル資料のほとんどは、ひどくひどいものです。頭の中をまっすぐにするのに何年もかかりました。)

  • thisが呼び出し時に決定される方法であり、バインドされていません。結果としてメソッドを渡す方法 期待どおりに動作しない 他の言語から;それを回避するためにクロージャーまたはFunction#bindを使用する方法。

  • indexOfforEach、および関数型プログラミング Arrayのメソッド などの他のECMAScript Fifth Editionの機能古いブラウザーを使用できるように修正する方法。インラインの匿名関数式でそれらを使用して、コンパクトで読みやすいコードを取得します。

  • ブラウザーとユーザーコード間の制御の流れ。同期および非同期実行。制御フロー内で発生するイベント(フォーカスなど)対制御が戻るときに発生するイベントおよびタイムアウト。 alertのような想定される同期ビルトインを呼び出すと、壊滅的な再入可能性が発生する可能性があります。

  • クロスウィンドウスクリプティングがinstanceofに与える影響。クロスウィンドウスクリプティングがさまざまなドキュメントの制御フローにどのように影響するか。 postMessageがどのようにこれを修正するのか。

最後の2つの項目について this answer を参照してください。

何よりも、JavaScriptを批判的に表示し、歴史的な理由で不完全な言語(ほとんどの言語よりも多い)であることを認識し、最悪のトラブルを回避する必要があります。この点でのクロックフォードの研究は間違いなく読む価値があります(ただし、「良い部分」がどこにあるのかについては100%同意していません)。

590
bobince

無効にできること。

248
graphicdivine

Crockfordの Javascript:The Good Parts で書かれたものを理解することは、人がまともなJSプログラマーであるというかなり良い前提です。

JQueryのような優れたライブラリを使用する方法はほとんど知っていますが、Javascriptの隠された部分はまだわかりません。

もう1つの注意点は、さまざまなブラウザーのデバッグツールです。 JSプログラマーは、さまざまなブラウザーでコードをデバッグする方法を知っている必要があります。

ああ!そして、JSLintを知ることはあなたの感情を完全に傷つけます!!

75
bron

真のJavaScript忍者になりたい場合は、 Perfection kills JavaScript Quiz のすべての質問に対する答えを知っておく必要があります。

食欲をそそる例:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

この式は何を返しますか?

  • "数"
  • "未定義"
  • "関数"
  • エラー
49
Skilldrick

知らない場合はJavaScriptを知らない:

  1. 閉鎖
  2. プロトタイプベースの継承
  3. モジュールパターン
  4. W3C-DOM
  5. イベントの仕組み
46
edwin

..javascriptはJavaではありません:)

Webサイトの開発を始めた多くの人々は、javascriptは単なるJavaであると言ってきました!

37
  1. 少なくとも1つのJavascriptライブラリ(Jquery、Prototypeなど)に精通してください。

  2. 主要なブラウザー(MSIE 7-8、Firefox、Chrome、Safari)のデバッグツールの使用方法を学ぶ

  3. 業界について読む:Douglas CrockfordのWebサイトは宝庫であり、Ajaxian.comはJavascriptの新しい、面白い、または奇妙なアイデアについていくのに適したブログです。他にも多くのリソースがありますが、それらは私を最も助けてくれたものです。

27
David

Javascriptオブジェクトと関数ファーストクラス市民callbackseventsを忘れないようにしてから、JQuery

24
Sarfraz

Javascriptは1時間で学習できるものではありません!

24
Ashwin Prabhu

ローカルであると宣言されていない限り、変数はグローバルです!!

悪い(DoSomething()は10回しか呼び出されません):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

良い(DoSomething()は意図したとおりに50回呼び出されます):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();
23
theycallmemorty
20
Daniel Vassallo

Javascriptが元々LiveScriptと呼ばれ、JavaとJavascriptが関連しているためではなく、 'Java'プレフィックスがマーケティング目的で付加されたことを知るため(そうではありません)。

ああ、David Flanaganの「Javascript:The Definitive Guide」の任意のバージョンを所有している(この情報は2ページにあります)。

...そして、Jqueryのようなものが痛みを取り除く前に、Internet Explorer 4のdocument.all []およびNetscape Navigator 4のdocument.layers []を難読化しようとして以前に行ったことのある人たちを感謝します。

編集:

@Kinopikoが指摘しているように、JavaScriptは元々プロジェクトMochaと呼ばれていました( 一部のソース また、プロジェクトLiveWireと呼ばれていました) Javaプレフィックスが1996年初頭のリリースで採用される前。

8
amelvin

「JavaScriptを知っています」と言うには、次の点に注意する必要があります。

  1. JavaScriptは良いがDOMは問題点
  2. クロスブラウザの問題夢中にさせることができます
  3. コードが少なくとも4つの異なるブラウザでテスト済みである場合を除き、バグがないとは言えません
  4. 閉鎖 ..............知っておく必要があります
  5. プロトタイプベース ...........これを学ぶのが楽しい
  6. debugger keyword .....危機に役立つ
8
Anil Namde

このJavaScriptは、あなたが考えているよりも他の言語よりもはるかに異なります。このすばらしいGoogle Tech Talkをご覧になり、感想をお聞かせください: http://www.youtube.com/watch?v=hQVTIJBZook

7
ericteubert

すべてのjavascriptコーダーが知っておくべきことは何ですか?

どうですか、2回のクリックであなたの努力を止めることができます。したがって、可能であればフォールバックを提供してください。

7
Khainestar

Javascript:The Good Parts を読むことを強くお勧めします

6
Sungguk Lim

Array、Number、String、Date、およびObjectを効果的に使用できる場合、javascriptを知っています。 MathおよびRegExpのプラスポイント。関数を作成し、変数を使用できる必要があります(正しいスコープ内、つまりオブジェクトの「メソッド」として)。

クロージャ、贅沢な関数構文、blablaを知ることについてのコメントがあります。これらはすべて、この質問にはまったく関係ありません。これは、11秒以内に100mのダッシュを走らせることができるなら、あなたはランナーだと言うようなものです。

JavaScriptに習熟するには、おそらく数週間かかると言います。その後、専門家、忍者などになるには数年、数十冊の本、数千行のプログラミングが必要です。

しかし、それは問題ではありませんでした。

ああ、DOMはjavascriptの一部ではなく、jQueryでもありません。ですから、どちらも質問と同様に無関係だと思います。

4
Richard Inglis

上記のすべてを読んだ後、jQueryのようなフレームワークを使用してJavascriptを学習することも完全に素晴らしいです。真実は、それが多くの人々が最初にJSを拾った最初の方法だということです。 その中に恥はありません。

4
Soup

array .lengthメソッドは、配列のアイテムのカウントではなく、最高のインデックスです。アイテムがundefinedに設定されていた場合でも

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

この動作は、言語設計のバグとほとんど区別できません。

4
mykhal

jQueryが最良の推奨事項です。コード自体だけでなく、イディオム、スタイル、その背後にある考え方がエミュレーションに最もふさわしいのです。

3
duffymo

言語を本当によく学び、そのさまざまな癖を理解することは、(数年の)経験から来ています。あなたがより良いプログラマになりたいなら、私は言う、デザインパターン、それらをどのように、そしていつ使用するか、そして/またはそれを気づかずに使用しているときさえ理解するだろう。技術的なアーキテクチャとユーザーエクスペリエンス。

(JavaScript)言語を知っているということは、任意のフレームワークを選択して自由に使用できることを意味します。必然的にソースコードに飛び込む必要があり、フレームワークまたは2または3の構文のみを知っている場合は、そこまで行きません。そうは言っても、いくつかの異なるフレームワークのソースコードを取得することは、おそらくJavaScriptの使用方法を確認する最良の方法の1つです。 FirebugまたはWeb Inspectorでコードをステップ実行し、JavaScriptドキュメント、特にMozillaおよびWebkitのドキュメントを確認して、見ているものをさらに理解します。

JavaScriptはオブジェクト指向プログラミングと関数型プログラミングの違いを理解しています。JavaScriptはこの2つの組み合わせであり、キラーコードベースとすばらしいアプリケーションの両方を作成するためにいつ、どのように使用するかがJavaScriptプログラマーになります。

単にいくつかの本、特にJavaScriptの優れた部分についての彼の意見を提示するだけのCrockfordの「良い部分」を読んで、JavaScriptのすばらしい部分のほとんどをスキップすると、間違った方向に進んでしまいます。

一方、Thomas Fuchsのような人が書いたコードをチェックすると、驚くほど効率的なJavaScriptを書く力について、より多くの洞察が得られます。

いくつかの落とし穴やWTFを記憶しようとしてもあまり役に立ちません。ライブラリ/フレームワークのコード、特に有用なコメントが付けられたコードをコーディングし、ステップ実行すると、それらを特定して、特定の理由を確認できます。特定のオペランドと演算子を使用するのが適切である場合、他のプロパティ/値ではなく、プロパティ/値は、フレームワークの人々が使用するコードにすべてあります。例で学ぶよりも良いでしょうか? :^)

そのjavascriptは、世界で最も広く展開されている言語です。 (恐らく)

3
zaf

JavaScriptでは、パフォーマンスが重要です。

コードを最適化するためのインテリジェントなコンパイラはありませんので、C#、Javaなどの言語よりもJavaScriptコードを記述している間は注意が必要です。

2
mcaaltuntas

オブジェクトリテラルは非常に優れているためです。

1
poo

次のことも重要です。

1)可変巻き上げ。 2)スコープチェーンとアクティベーションオブジェクト。

そして、これらのようなもの::)

3) wtfjs.com

4) すべてがオブジェクトhttp://www.lifeinafolder.com/images/Js.jpg

0
Rajat
  1. with()の有無にかかわらず生活があり、どこに線を引くかを知っています。
  2. throwステートメントを使用してカスタムエラーを作成し、意図的にjavascriptランタイムを停止できます。
0
FK82