すべてのJavaScriptプログラマーが「JavaScriptを知っている」と言うために知っておくべきことはありますか?
jQueryではありません。ゆいじゃない。しない(など)
フレームワークは便利かもしれませんが、JavaScriptとDOMが実際にどのように機能するかについて、時々見苦しい詳細が隠されています。 「私はJavaScriptを知っています」と言うことができるようにすることを目的とする場合、フレームワークに多くの時間を投資することは反対です。
JavaScriptの機能の一部を以下に示します。これらの機能は、何をしているのかを理解するために知っておくべきですが、多くの人にはすぐにはわかりません。
object.prop
とobject['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
を使用する方法。
indexOf
、forEach
、および関数型プログラミング Array
のメソッド などの他のECMAScript Fifth Editionの機能古いブラウザーを使用できるように修正する方法。インラインの匿名関数式でそれらを使用して、コンパクトで読みやすいコードを取得します。
ブラウザーとユーザーコード間の制御の流れ。同期および非同期実行。制御フロー内で発生するイベント(フォーカスなど)対制御が戻るときに発生するイベントおよびタイムアウト。 alert
のような想定される同期ビルトインを呼び出すと、壊滅的な再入可能性が発生する可能性があります。
クロスウィンドウスクリプティングがinstanceof
に与える影響。クロスウィンドウスクリプティングがさまざまなドキュメントの制御フローにどのように影響するか。 postMessage
がどのようにこれを修正するのか。
最後の2つの項目について this answer を参照してください。
何よりも、JavaScriptを批判的に表示し、歴史的な理由で不完全な言語(ほとんどの言語よりも多い)であることを認識し、最悪のトラブルを回避する必要があります。この点でのクロックフォードの研究は間違いなく読む価値があります(ただし、「良い部分」がどこにあるのかについては100%同意していません)。
無効にできること。
Crockfordの Javascript:The Good Parts で書かれたものを理解することは、人がまともなJSプログラマーであるというかなり良い前提です。
JQueryのような優れたライブラリを使用する方法はほとんど知っていますが、Javascriptの隠された部分はまだわかりません。
もう1つの注意点は、さまざまなブラウザーのデバッグツールです。 JSプログラマーは、さまざまなブラウザーでコードをデバッグする方法を知っている必要があります。
ああ!そして、JSLintを知ることはあなたの感情を完全に傷つけます!!
真のJavaScript忍者になりたい場合は、 Perfection kills JavaScript Quiz のすべての質問に対する答えを知っておく必要があります。
食欲をそそる例:
(function f(f){
return typeof f();
})(function(){ return 1; });
この式は何を返しますか?
- "数"
- "未定義"
- "関数"
- エラー
知らない場合はJavaScriptを知らない:
..javascriptはJavaではありません:)
Webサイトの開発を始めた多くの人々は、javascriptは単なるJavaであると言ってきました!
少なくとも1つのJavascriptライブラリ(Jquery、Prototypeなど)に精通してください。
主要なブラウザー(MSIE 7-8、Firefox、Chrome、Safari)のデバッグツールの使用方法を学ぶ
業界について読む:Douglas CrockfordのWebサイトは宝庫であり、Ajaxian.comはJavascriptの新しい、面白い、または奇妙なアイデアについていくのに適したブログです。他にも多くのリソースがありますが、それらは私を最も助けてくれたものです。
Javascriptオブジェクトと関数ファーストクラス市民、callbacks、eventsを忘れないようにしてから、JQuery。
Javascriptは1時間で学習できるものではありません!
ローカルであると宣言されていない限り、変数はグローバルです!!
悪い(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();
方法 良い部分を使用し、ひどい部分を避ける方法 。
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年初頭のリリースで採用される前。
「JavaScriptを知っています」と言うには、次の点に注意する必要があります。
このJavaScriptは、あなたが考えているよりも他の言語よりもはるかに異なります。このすばらしいGoogle Tech Talkをご覧になり、感想をお聞かせください: http://www.youtube.com/watch?v=hQVTIJBZook
すべてのjavascriptコーダーが知っておくべきことは何ですか?
どうですか、2回のクリックであなたの努力を止めることができます。したがって、可能であればフォールバックを提供してください。
Javascript:The Good Parts を読むことを強くお勧めします
Array、Number、String、Date、およびObjectを効果的に使用できる場合、javascriptを知っています。 MathおよびRegExpのプラスポイント。関数を作成し、変数を使用できる必要があります(正しいスコープ内、つまりオブジェクトの「メソッド」として)。
クロージャ、贅沢な関数構文、blablaを知ることについてのコメントがあります。これらはすべて、この質問にはまったく関係ありません。これは、11秒以内に100mのダッシュを走らせることができるなら、あなたはランナーだと言うようなものです。
JavaScriptに習熟するには、おそらく数週間かかると言います。その後、専門家、忍者などになるには数年、数十冊の本、数千行のプログラミングが必要です。
しかし、それは問題ではありませんでした。
ああ、DOMはjavascriptの一部ではなく、jQueryでもありません。ですから、どちらも質問と同様に無関係だと思います。
JSLint http://www.JSLint.com/
上記のすべてを読んだ後、jQueryのようなフレームワークを使用してJavascriptを学習することも完全に素晴らしいです。真実は、それが多くの人々が最初にJSを拾った最初の方法だということです。 その中に恥はありません。
array .length
メソッドは、配列のアイテムのカウントではなく、最高のインデックスです。アイテムがundefined
に設定されていた場合でも
var a = [];
a.length; // === 0
a[10]; // === undefined
a[10] = undefined;
a.length; // === 11
a.pop(); // === undefined
a.length; // === 10
この動作は、言語設計のバグとほとんど区別できません。
jQueryが最良の推奨事項です。コード自体だけでなく、イディオム、スタイル、その背後にある考え方がエミュレーションに最もふさわしいのです。
言語を本当によく学び、そのさまざまな癖を理解することは、(数年の)経験から来ています。あなたがより良いプログラマになりたいなら、私は言う、デザインパターン、それらをどのように、そしていつ使用するか、そして/またはそれを気づかずに使用しているときさえ理解するだろう。技術的なアーキテクチャとユーザーエクスペリエンス。
(JavaScript)言語を知っているということは、任意のフレームワークを選択して自由に使用できることを意味します。必然的にソースコードに飛び込む必要があり、フレームワークまたは2または3の構文のみを知っている場合は、そこまで行きません。そうは言っても、いくつかの異なるフレームワークのソースコードを取得することは、おそらくJavaScriptの使用方法を確認する最良の方法の1つです。 FirebugまたはWeb Inspectorでコードをステップ実行し、JavaScriptドキュメント、特にMozillaおよびWebkitのドキュメントを確認して、見ているものをさらに理解します。
JavaScriptはオブジェクト指向プログラミングと関数型プログラミングの違いを理解しています。JavaScriptはこの2つの組み合わせであり、キラーコードベースとすばらしいアプリケーションの両方を作成するためにいつ、どのように使用するかがJavaScriptプログラマーになります。
単にいくつかの本、特にJavaScriptの優れた部分についての彼の意見を提示するだけのCrockfordの「良い部分」を読んで、JavaScriptのすばらしい部分のほとんどをスキップすると、間違った方向に進んでしまいます。
一方、Thomas Fuchsのような人が書いたコードをチェックすると、驚くほど効率的なJavaScriptを書く力について、より多くの洞察が得られます。
いくつかの落とし穴やWTFを記憶しようとしてもあまり役に立ちません。ライブラリ/フレームワークのコード、特に有用なコメントが付けられたコードをコーディングし、ステップ実行すると、それらを特定して、特定の理由を確認できます。特定のオペランドと演算子を使用するのが適切である場合、他のプロパティ/値ではなく、プロパティ/値は、フレームワークの人々が使用するコードにすべてあります。例で学ぶよりも良いでしょうか? :^)
そのjavascriptは、世界で最も広く展開されている言語です。 (恐らく)
JavaScriptでは、パフォーマンスが重要です。
コードを最適化するためのインテリジェントなコンパイラはありませんので、C#、Javaなどの言語よりもJavaScriptコードを記述している間は注意が必要です。
オブジェクトリテラルは非常に優れているためです。
with()
の有無にかかわらず生活があり、どこに線を引くかを知っています。throw
ステートメントを使用してカスタムエラーを作成し、意図的にjavascriptランタイムを停止できます。