「私は JavaScript を知っている」と言えるようになるために、すべての JavaScript プログラマーが知っておくべき一連の事柄はありますか?
ベストアンサー1
jQuery ではない。YUI ではない。(などなど) ではない。
フレームワークは便利な場合もありますが、JavaScript と DOM が実際にどのように動作するかという、時には厄介な詳細を隠してしまうことがよくあります。「JavaScript を知っている」と言えるようになることが目標であれば、フレームワークに多くの時間を費やすことはそれに反します。
ここでは、JavaScript 言語の機能のいくつかを紹介します。これらの機能は、JavaScript が何をしているのかを理解し、困惑しないために知っておく必要がありますが、多くの人にはすぐにはわかりません。
と
object.prop
はobject['prop']
同じものです (ですから の使用はやめてくださいeval
)。オブジェクトのプロパティは常に文字列です (配列の場合でも)。for
...は何in
のためにあるのか(そしてそれが何ではないのか)。不動産スニッフィングとは何か
undefined
(そしてなぜ臭いのか); 一見あまり知られていない演算子が有益であり、 /チェックin
と異なる理由; ; の目的。typeof
undefined
hasOwnProperty
delete
データ型は実際には float であること
Number
、float を使用する際の言語に依存しない難しさ、parseInt
8 進数の罠を回避すること。var
ネストされた関数のスコープ;偶発的なグローバル化を避けるためにスコープ内で使用する必要があること; クロージャにスコープを使用する方法;閉ループ問題。グローバル変数と
window
プロパティがどのように衝突するか、グローバル変数とドキュメント要素が衝突してはならないのに IE では衝突する理由、var
これを回避するにはグローバル スコープでも使用する必要があること。この
function
声明が「ホイスト' コードの前の定義; 関数文と関数式の違い; 名前付き関数式がなぜ必要か使用しないでください。コンストラクター関数、
prototype
プロパティ、new
演算子が実際にどのように機能するか。方法これを利用して、実際に必要な通常のクラス/サブクラス/インスタンス システムを作成することは、プロトタイプではなくクロージャ ベースのオブジェクトを使用したい場合に便利です。(ほとんどの JS チュートリアル マテリアルは、この点についてまったくひどい内容で、頭の中で理解するのに何年もかかりました。)方法
this
は呼び出し時に決定され、バインドされません。その結果、メソッドの受け渡し方法期待通りに動作しない他の言語から; クロージャまたはをFunction#bind
使用してそれを回避できる方法。ECMAScript第5版の他の機能としては
indexOf
、、forEach
関数型プログラミング方法Array
; 古いブラウザを修正して使用できるようにする方法; インライン匿名関数式を使用してコンパクトで読みやすいコードを取得する方法。ブラウザとユーザー コード間の制御フロー、同期実行と非同期実行、制御フロー内で発生するイベント (フォーカスなど) と制御が戻ったときに発生するイベントとタイムアウト、同期するはずの組み込みを呼び出すと、潜在的に
alert
悲惨な再入可能性が発生する可能性がある理由。クロスウィンドウ スクリプトが にどのように影響するか
instanceof
、クロスウィンドウ スクリプトが異なるドキュメント間の制御フローにどのように影響するか、postMessage
これをどのように修正するか。
見るこの答え最後の2つの項目に関して。
何よりも、JavaScript を批判的に見る必要があります。歴史的な理由から JavaScript は不完全な言語である (ほとんどの言語よりもさらに不完全である) ことを認め、最悪の問題点は避ける必要があります。この点に関する Crockford の著作は間違いなく読む価値があります (ただし、どの部分が「良い部分」であるかについては、私は 100% 同意しません)。