回答:
jQueryではありません。YUIじゃない。ない(等)
フレームワークは便利かもしれませんが、JavaScriptとDOMが実際にどのように機能するかについて、見苦しい詳細を隠していることがよくあります。あなたが「JavaScriptを知っている」と言えるようになることが目的である場合、フレームワークに多くの時間を費やすことはそれとは反対です。
JavaScriptの機能の一部を以下に示します。JavaScriptの機能を理解するために知っておく必要があるのですが、すぐにわかりません。
これobject.prop
とobject['prop']
同じことです(あなたがストップ使用してくださいすることができeval
、感謝し)。オブジェクトのプロパティは常に(配列の場合でも)文字列です。何for
... in
のためである(そして何それはないです)。
プロパティスニッフィング; 何であるかundefined
(そしてそれがなぜにおいがするか); あまり知られていないように見えるin
演算子が有益で、typeof
/ undefined
checks と異なる理由; hasOwnProperty
; の目的delete
。
そのNumber
データ型は本当にフロートです。floatを使用する言語に依存しない問題。parseInt
8進トラップを回避します。
ネストされた関数スコープ。var
偶発的なグローバルを回避したいスコープで使用する必要性。スコープをクロージャに使用する方法。閉鎖ループの問題。
グローバル変数とwindow
プロパティがどのように衝突するか。どのようにグローバル変数とドキュメント要素がIEで衝突するべきではなく衝突するか。var
これを回避するためにグローバルスコープでも使用する必要性。
function
ステートメントが、その前のコードの前に定義を「巻き上げる」ように機能する方法。関数ステートメントと関数式の違い。名前付き関数式を使用すべきではない理由。
コンストラクタがどのように機能するか、prototype
プロパティとnew
演算子は実際に機能します。これを利用して実際に必要な通常のクラス/サブクラス/インスタンスシステムを作成する方法。プロトタイピングの代わりにクロージャベースのオブジェクトを使用したい場合。(ほとんどのJSチュートリアルの資料は、これについてはひどいものです。頭の中でまっすぐに理解するのに何年もかかりました。)
this
バインドではなく、呼び出し時にどのように決定されるか。その結果、メソッドの受け渡しが他の言語で期待するように機能しない。どのようにクロージャをFunction#bind
使用するか、それを回避するために使用できるか。
その他のECMAScript Fifth Editionの機能indexOf
、forEach
およびの関数型プログラミングメソッドArray
。古いブラウザを修正して使用できるようにする方法。インラインの無名関数式でそれらを使用して、コンパクトで読みやすいコードを取得します。
ブラウザとユーザーコード間の制御の流れ。同期および非同期の実行。コントロールのフロー内で発生するイベント(フォーカスなど)と、コントロールが戻ったときに発生するイベントおよびタイムアウト。どうやら同期が必要な組み込み関数のようなものを呼び出すと、alert
結局は悲惨な再入可能性が引き起こされる可能性があります。
クロスウィンドウスクリプティングがどのように影響するかinstanceof
。クロスウィンドウスクリプティングが異なるドキュメント間の制御フローにどのように影響するか。どのようにpostMessage
うまくいけば、この問題を解決します。
最後の2つの項目については、この回答を参照してください。
何よりも、JavaScriptを批判的に表示し、それが歴史的な理由で不完全な言語(ほとんどの言語よりもさらに多い)であることを認め、その最悪の問題を回避する必要があります。この面でのクロックフォードの作品は間違いなく読む価値があります(「良い部分」について彼に100%同意するわけではありませんが)。
this
はなく、どの方法でアクセスしてもバインドされます。試してください:var o= {b: function(){alert(this===o);}};
、次にo['b']();
-> true
。そして、あなたが本当に気紛れになりたいなら、(o['b'])()
-> true
、しかし(c= o['b'])()
-> false
、そしてMozillaだけで(true? o['b'] : null)()
-> true
。W、T、そして確かにF.
無効にできること。
CrockfordのJavascript:The Good Partsで記述されたものを理解することは、人がきちんとしたJSプログラマーであるというかなり良い仮定です。
JQueryのような優れたライブラリの使用方法をほとんど知っていても、Javascriptの隠れた部分を知らない場合があります。
もう1つの注意点は、さまざまなブラウザーのデバッグツールです。JSプログラマーは、さまざまなブラウザーでコードをデバッグする方法を知っている必要があります。
ああ!そして、JSLintを知ることはあなたの気持ちを完全に傷つけるでしょう!!
真のJavaScript忍者になりたい場合は、Perfectionのすべての質問に対する答えがJavaScriptクイズを殺すことを知っている必要があります。
食欲をそそる例:
(function f(f){
return typeof f();
})(function(){ return 1; });
この式は何を返しますか?
- "数"
- "未定義"
- "関数"
- エラー
あなたが知らない場合、あなたはJavaScriptを知らない:
You don't know JavaScript if you don't know The W3C-DOM
ます。2つは異なります。
..そのjavascriptはjavaではありません:)
ウェブサイトの開発を始めた多くの人が、javascriptは単なるjavaだと言っています。
少なくとも1つのJavascriptライブラリ(Jquery、Prototypeなど)をよく理解してください。
主要なブラウザー(MSIE 7-8、Firefox、Chrome、Safari)のデバッグツールの使用方法を学ぶ
業界の最新情報:Douglas CrockfordのWebサイトは宝の山ですが、Ajaxian.comは、JavaScriptの新しい、興味深い、または奇妙なアイデアを追いかけるのに適したブログです。他にも多くのリソースがありますが、それらは私を最も助けてくれたものです。
ローカルであると宣言されていない限り、変数はグローバルです!!
悪い(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();
for (var i=0;
自分のすべてのループの習慣を身につけようとします
var
変数のスコープのサイズについてだまされないため、Crockfordは関数の先頭にを置くことを好みます。同じ関数の2つの別々のループにいるjs2-mode
場合var i
、文句を言うfor
でしょう。これは、2つの別々の変数があると考え、そうではないことを示唆しているためです。それにもかかわらず、私はvar
それらを初期化する場所から分離しないように努めています。
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と呼ばれていました(一部のソースではProject LiveWire とも呼ばれていました)が、Javaプレフィックスが採用される前に(Brendan Eichによって作成された)言語がLiveScriptとしてリリースされる予定であったことは一般に受け入れられています1996年初頭にリリース。
「私はJavaScriptを知っています」と言うには、次のことに注意する必要があります。
そのJavaScriptは、あなたが思っているよりも他の言語とははるかに異なります。このすばらしいGoogle Tech Talkを見て、印象をつかんでください:http : //www.youtube.com/watch?v=hQVTIJBZook
すべてのJavaScriptコーダーが知っておくべきことは何ですか?
では、2クリックであなたの努力を止めることができます。したがって、可能であればフォールバックを提供します。
Javascript:良い部分を読むことを強くお勧めします
Array、Number、String、Date、およびObjectを効果的に使用できるかどうか、JavaScriptを知っています。数学と正規表現のプラスポイント。関数を記述して変数を使用できるようにする必要があります(正しいスコープで、つまりオブジェクトの「メソッド」として)。
クロージャー、贅沢な関数構文、blablaについてのコメントがいくつかあります。これらすべては、この質問にはまったく関係ありません。それは、100mダッシュを11秒未満で走らせることができれば、ランナーだと言っているようなものです。
私は、JavaScriptに習熟するまでに数週間かかると言います。その後、専門家や忍者などになるには、何十年もの本と何千ものプログラミング行が必要です。
しかし、それは問題ではありませんでした。
DOMはJavaScriptの一部ではなく、jQueryでもありません。ですから、どちらも同じように問題には関係ないと思います。
JSLint http://www.JSLint.com/
jQueryは私の最高の推奨事項です。コード自体だけでなく、イディオム、スタイル、背後にある考え方がエミュレーションに最もふさわしいものです。
そのjavascriptは、世界で最も広く展開されている言語です。(多分)
言語を本当によく学び、そのさまざまな癖を理解することは、何年にもわたる経験から生まれます。あなたがより良いプログラマーになりたいのであれば、私は、デザインパターン、それらをいつどのように使用するのか、そして/またはそれを実現せずに使用しているときさえ理解することを言うでしょう。技術アーキテクチャとユーザーエクスペリエンス。
(JavaScript)言語を知っているということは、任意のフレームワークを選択して自由に使用できることを意味します。あなたは必然的にソースコードに飛び込む必要があります、そしてあなたが知っているすべてが構文またはフレームワークまたは2または3であるならば、あなたは遠くに行くことはありません。つまり、いくつかの異なるフレームワークのソースコードにアクセスすることは、おそらくJavaScriptの使用方法を確認するための最良の方法の1つです。FirebugまたはWeb Inspectorでコードをステップ実行し、JavaScriptドキュメント、特にMozillaとWebkitのドキュメントをチェックして、見ているものについてさらに理解を深めることで混乱します。
オブジェクト指向プログラミングと関数型プログラミングの違いを理解すると、JavaScriptは2つの魅力的な組み合わせであり、キラーコードベースと素晴らしいアプリケーションを作成するために両方をいつ、どのように使用するかは、より優れたJavaScriptプログラマーになります。
いくつかの本、特にJavaScriptの何が良いかについての彼の意見を提示しているだけのCrockfordの「良い部分」を読んでいるだけで、JavaScriptのほとんどの素晴らしい部分をスキップすると、間違った足がかりになります。
一方、Thomas Fuchsのような誰かによって書かれたコードをチェックアウトすると、驚くほど効率的なJavaScriptを書くことの力について、より多くの洞察が得られます。
いくつかの落とし穴やWTFを覚えようとしても、あまり役に立たないので、ライブラリ/フレームワークのコード、特に役立つコメントが付いたコードをコーディングしてステップスルーすると、それらが特定のものを使用した理由を確認できます。プロパティ/値であり、特定のオペランドと演算子を使用するのが適切な理由と理由は他にありません。これは、フレームワークの人々が使用するコードにすべて含まれています。例で学ぶよりも優れていますか?:^)
次のことも重要です。
1)可変巻き上げ。2)スコープチェーンとアクティベーションオブジェクト。
そして、これらのようなもの::)
JavaScriptは、returnキーワードとreturnステートメントを次のコードのような改行文字で区切ることをサポートしていません(またはjsFiddleページで試してください)
function foo()
{
return
{
bar: 'something'
};
}
$(function()
{
document.write(foo());
});
JavaScriptがデフォルトのスタイルのJavaScriptと比較すると、非常に複雑なJavaScriptソースコードを読みやすくなるため、JavaScriptがこのスタイルをサポートしない理由がわかりません。
PS。私はJavaScriptを6年近く書いています。しかし、私は次の関数を実行しようとしたときに自分でこのバグを見つけました。常に未定義を返します。デバッガーを使用してこの関数にステップインすると、すべて正常に動作します。私の人生で最悪のプログラミングバグになると思います。
function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
return
(!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
(!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
(!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
(!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}
var foo = "bar" +
、パーサーが読み取ります。
var foo = 5
あり-1;
、それぞれが有効なステートメントであるにもかかわらず、fooは4に設定されます。
... Google Web Toolkitについて。つまり、JavaScriptプロジェクトはおそらくもっと便利な方法で開発できるでしょう。