1. ホーム
  2. javascript

[解決済み] JavaScriptプログラマーが知っておくべきこととは?[クローズド]

2022-03-14 20:14:13

質問

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

どのように解決するのか?

jQueryではありません。YUIでもない。ではない(などなど)。

フレームワークは便利かもしれませんが、JavaScript と DOM が実際にどのように動作するかという、時に醜い詳細を隠していることが多いのです。もしあなたの目的が「私はJavaScriptを知っている」と言えるようになることであるなら、フレームワークに多くの時間を費やすことはそれに反しています。

ここでは、JavaScriptが何をしているのかを理解し、バレないようにするために知っておくべき、しかし多くの人にとってすぐにはわからないJavaScriptの言語機能をいくつか紹介します。

  • その object.propobject['prop'] は同じものです。 eval オブジェクトのプロパティは常に文字列であること(配列の場合でも)。 for ... in (そして そうでないもの ).

  • プロパティスニッフィング;何 undefined は(そして なぜ臭うのか )、なぜ、一見するとあまり知られていない in とは異なる有益な演算子です。 typeof / undefined をチェックします。 hasOwnProperty の目的 delete .

  • その Number データ型が本当に浮動小数点数であること、言語に依存しない浮動小数点数の使用方法の難しさ、そして parseInt 8進数の罠

  • ネストされた関数のスコープ; を使う必然性 var を使用することで、偶発的なグローバルを避けることができます。また、スコープをクロージャに使用することもできます。 クロージャループ問題 .

  • どのようにグローバル変数と window プロパティが衝突すること、グローバル変数とドキュメント要素が衝突しないはずなのに IE では衝突してしまうこと、グローバル変数とドキュメント要素が衝突しないようにするために var をグローバルスコープでも使用することで、これを回避することができます。

  • どのように function ステートメントが作用して、' ホイスト 関数文と関数式の違い、なぜ関数式という名前なのか? を使うべきではありません。 .

  • コンストラクタの機能である prototype プロパティと new 演算子は本当に機能します。 メソッド プロトタイピングの代わりにクロージャベースのオブジェクトを使いたい場合、これを利用して通常のクラス/サブクラス/インスタンスシステムを作成します。(ほとんどのJSチュートリアルの教材は、これに関して全くひどいものです。)

  • どのように this はバインドされるのではなく、呼び出し時に決定されます。 は期待通りには動きません。 他の言語では、クロージャや Function#bind は、それを回避するために使用されるかもしれません。

  • その他、ECMAScript 第 5 版の特徴である indexOf , forEach と、関数型プログラミングの メソッドを Array 古いブラウザでも使えるように修正する方法、インラインの無名関数式を使ってコンパクトで読みやすいコードを作る方法などです。

  • ブラウザとユーザーコードの間の制御の流れ、同期と非同期実行、制御の流れの中で発生するイベント(例:フォーカス)と制御が戻ったときに発生するイベントとタイムアウト、同期であるはずの alert は、潜在的に悲惨なリエントランシーを引き起こすことになりかねません。

  • クロスウィンドウスクリプティングの影響 instanceof クロスウィンドウスクリプティングが異なるドキュメント間のコントロールフローにどのような影響を与えるか、どのように postMessage がこれを解決してくれることを期待します。

参照 この回答 については、最後の2項目です。

何よりも、JavaScriptを批判的に見ること、歴史的な理由から不完全な言語であること(他の言語よりも)、そしてその最悪のトラブルスポットを避けることが重要です。この点に関するCrockfordの研究は、間違いなく読む価値があります(ただし、どの部分が「良い部分」なのかについては、彼と100%同意するわけではありません)。