ホームに戻る
JavaScriptコース
動的なWebアプリケーション開発の基礎となるJavaScriptを学びましょう
初
初級
無料で学習可能
初級JavaScript基礎
問題1: Hello World
console.logを使って「Hello World」を出力してください。これがプログラミングの第一歩です!
初級JavaScript基礎
問題2: 変数宣言 - let
letを使って変数を宣言し、その変数を使って挨拶を出力してください。変数は再代入可能な値を保存する箱のようなものです。
初級JavaScript基礎
問題3: 定数宣言 - const
constを使って定数を宣言してください。定数は一度代入したら変更できない値を保存する箱です。円周率のような固定値に最適です。
初級JavaScript基礎
問題4: 文字列型
文字列リテラルの基本を学びましょう。JavaScriptでは、ダブルクォート(")とシングルクォート(')の両方を使って文字列を作成できます。
初級JavaScript基礎
問題5: 数値型
JavaScriptの数値型を学びましょう。整数、小数、負の数など、すべて同じ数値型として扱われます。引用符は不要です。
初級JavaScript基礎
問題6: 真偽値型
JavaScriptの真偽値(Boolean)型を学びましょう。trueとfalseの2つの値のみを持ち、条件分岐やフラグ管理に使われます。最初の変数にはtrue、2番目の変数にはfalseを代入してください。
初級JavaScript基礎
問題7: 算術演算子
JavaScriptの算術演算子を学びましょう。足し算(+)、引き算(-)、掛け算(*)、割り算(/)、剰余(%)の5つの基本的な演算子を使って計算を行います。
初級JavaScript基礎
問題8: 比較演算子
JavaScriptの比較演算子を学びましょう。厳密等価(===)、厳密不等価(!==)、大小比較(<、>、<=、>=)を使って値を比較します。厳密等価演算子は型も含めて比較するため、数値の5と文字列の'5'は異なるものとして扱われます。
初級JavaScript基礎
問題9: 論理演算子
true/falseを組み合わせる演算子。&&(かつ)、||(または)、!(否定)を空欄に入れて、期待される結果を出力してください。
初級JavaScript基礎
問題10: テンプレートリテラル
テンプレートリテラルを学びましょう。バッククォート(`)を使って文字列を作成し、${}を使って変数や式を埋め込むことができます。これにより、文字列の連結がより簡単になります。
初級JavaScript基礎
問題11: 型変換 - 文字列へ
JavaScriptの型変換を学びましょう。String()関数を使って明示的に文字列に変換する方法と、空文字列を追加して暗黙的に変換する方法を理解します。
初級JavaScript基礎
問題12: 型変換 - 数値へ
文字列から数値への型変換を学びましょう。Number()関数を使った明示的な変換と、単項プラス演算子(+)を使った簡潔な変換方法を理解します。数値に変換できない場合はNaNになります。
初級JavaScript基礎
問題13: typeof演算子
typeof演算子を使ってデータ型を確認する方法を学びましょう。JavaScriptの各データ型がtypeofでどのような値を返すか理解します。特に配列とnullの結果に注意してください。
初級basics
問題14: nullとundefined
nullとundefinedの違いを理解しましょう。undefinedは値が未定義、nullは明示的に「空」を表します。等価演算子での比較や、デフォルト引数での動作の違いにも注目してください。
初級basics
問題15: コメントの書き方
JavaScriptのコメントの書き方を学びましょう。単一行コメント(//)、複数行コメント(/* */)、JSDocコメント(/** */)の使い方を理解します。コメントはコードの説明やメモを残すために重要です。
初級controlFlow
問題16: if文基礎
if文を使った条件分岐を学びましょう。条件がtrueの場合のみ中括弧内のコードが実行されます。論理演算子を使った複数条件の組み合わせも理解しましょう。
初級controlFlow
問題17: if-else文
if-else文を使った二分岐を学びましょう。条件がtrueの場合とfalseの場合で異なる処理を実行できます。また、三項演算子(? :)を使った簡潔な条件分岐も理解しましょう。
初級controlFlow
問題18: else if文
else if文を使った複数条件の分岐を学びましょう。複数の条件を順番にチェックし、最初にtrueになった条件のブロックが実行されます。成績評価、年齢別分類、気温判定などの実用的な例を通して理解しましょう。
初級controlFlow
問題19: switch文
switch文を使った複数値による分岐を学びましょう。特定の値に応じて異なる処理を実行できます。caseとbreakの使い方、defaultの役割を理解しましょう。switch(true)パターンも学びます。
初級controlFlow
問題20: for文基礎
for文を使ったカウンタによるループ処理を学びましょう。初期化、条件、更新の3つの要素を理解し、指定回数の繰り返し処理を実装します。順方向、逆方向、ステップ数を変えたループも学びます。
初級controlFlow
問題21: while文
while文を使った条件が真の間繰り返すループを学びましょう。for文と違い、繰り返し回数が事前に決まっていない場合に便利です。基本的な使い方から、複数条件の組み合わせ、階乗計算まで実践的な例を通して理解します。
初級controlFlow
問題22: do-while文
do-while文を使った後判定ループを学びましょう。while文と違い、条件に関わらず最低1回は処理が実行されます。メニュー選択や入力値検証など、最低1回は実行が必要な場面で活用します。通常のwhile文との使い分けを理解しましょう。
初級javascript
問題23: break文
break文を使ってループを途中で終了する方法を学びましょう。特定の条件を満たしたときにループから脱出する場合に使用します。検索処理や異常値の検出など、目的を達成したらすぐに処理を終了したい場面で活用します。break文はfor、while、do-whileのすべてのループで使用できます。
初級javascript
問題24: continue文
continue文を使って現在の繰り返しをスキップし、次の繰り返しへ進む方法を学びましょう。特定の条件に合う要素を除外して処理したい場合に便利です。フィルタリングやデータのクリーニング処理でよく使われます。breakとは異なり、ループ自体は継続されます。
初級javascript
問題25: ネストしたループ
ネストしたループ(二重ループ)を使って九九表を作成しましょう。外側のループと内側のループがどのように動作するかを理解することが重要です。表形式のデータ処理、2次元配列の操作、グリッド状の処理など、実践的なプログラミングでよく使用されるパターンです。
初級javascript
問題26: 関数の宣言
関数の宣言と呼び出しの基本を学びましょう。関数は処理をまとめて名前を付けたもので、コードの再利用性を高める基本的な仕組みです。functionキーワードを使って宣言し、関数名の後に()を付けて呼び出します。同じ処理を何度も繰り返し使えるため、保守性の高いコードが書けます。
初級javascript
問題27: パラメータと引数
関数にパラメータを定義し、引数を渡す方法を学びましょう。パラメータは関数が受け取る値の入れ物で、引数は関数を呼び出すときに渡す実際の値です。これにより、同じ関数を異なる値で再利用できるようになります。動的な処理を作る基礎となる重要な概念です。
初級javascript
問題28: パラメータ基礎
関数に値を渡す基本として、単一のパラメータを受け取る関数を作成しましょう。パラメータを使うことで、関数が外部から値を受け取り、その値に基づいて処理を行えるようになります。これは関数の汎用性を高める大切なステップです。数値計算や文字列処理など、様々な場面で活用されます。
初級javascript
問題29: 複数パラメータ
複数のパラメータを持つ関数の作成方法を学びましょう。カンマで区切って複数のパラメータを定義し、同じ順序で引数を渡します。引数の順序は非常に重要で、間違えると予期しない結果になるため注意が必要です。複雑な計算や複数のデータを扱う関数では一般的なパターンです。
初級javascript
問題30: return文
return文を使って関数から値を返す方法を学びましょう。return文を使うと、関数が計算した結果や処理した結果を呼び出し元に返すことができます。これにより、関数の計算結果を変数に代入したり、他の関数に渡したりできるようになります。単に処理を実行するだけでなく、結果を利用したい場合に必要な基本機能です。
初級javascript
問題31: 関数式
関数式を使って関数を変数に代入する方法を学びましょう。関数宣言とは異なり、関数を値として扱うことができます。これにより、関数を変数に保存したり、他の関数に渡したり、配列に格納したりできるようになります。JavaScriptでは関数は「第一級オブジェクト」として扱われます。
初級javascript
問題32: アロー関数基礎
アロー関数(=>)を使った新しい関数の書き方を学びましょう。ES6で導入されたこの記法は、従来の関数よりも簡潔に書けます。特に短い関数やコールバック関数でよく使われます。(パラメータ) => {処理}の形式で記述し、thisの挙動が異なることにも注意が必要です。
初級javascript
問題33: デフォルトパラメータ
デフォルトパラメータを使って、引数が省略されたときの初期値を設定する方法を学びましょう。パラメータに=を使ってデフォルト値を指定できます。これにより、必須でない引数を持つ柔軟な関数が作れます。オプション設定や初期値が明確な場合などで活用されます。
初級javascript
問題34: ローカルスコープ
ローカルスコープの概念を学びましょう。関数内で宣言された変数は、その関数内でのみアクセス可能で、外部からはアクセスできません。これにより、変数名の衝突を避け、コードの保守性を高めることができます。スコープの理解は、バグの少ないコードを書くための重要な基礎知識です。
初級javascript
問題35: グローバルスコープ
グローバルスコープの概念を学びましょう。関数の外で宣言された変数はグローバル変数となり、プログラムのどこからでもアクセスできます。便利ですが、過度な使用はコードの保守性を下げ、予期しない副作用を引き起こす可能性があるため、注意深く使用する必要があります。
初級array
問題36: 配列の作成
配列の基本的な作成方法を学びましょう。配列は複数の値を順番に格納できるデータ構造で、JavaScriptで最もよく使われるデータ型の一つです。[](角括弧)を使った配列リテラル記法で簡単に作成できます。リストデータの管理、ループ処理、データの一括操作など、様々な場面で活用されます。
初級array
問題37: インデックスアクセス
配列の要素にアクセスする方法を学びましょう。配列の各要素にはインデックス(索引)を使ってアクセスします。重要なのは、インデックスが0から始まることです。これは多くのプログラミング言語で共通の仕様で、メモリ効率や計算のしやすさに基づいています。配列操作の基礎中の基礎です。
初級array
問題38: 配列の長さ
配列のlengthプロパティを使って要素数を取得する方法を学びましょう。lengthプロパティは配列に含まれる要素の総数を返します。ループ処理で全要素を走査する際の終了条件、配列が空かどうかのチェック、最後の要素へのアクセスなど、非常に多くの場面で使用される重要なプロパティです。
初級array
問題39: pushメソッド
pushメソッドを使って配列の末尾に要素を追加する方法を学びましょう。pushは配列操作の中で最もよく使われるメソッドの一つで、動的にデータを追加する際に便利です。返り値として新しい配列の長さを返すので、追加後の要素数も確認できます。スタックデータ構造の実装や、データの逐次追加などで活用されます。
初級array
問題40: popメソッド
popメソッドを使って配列の末尾から要素を削除する方法を学びましょう。popはpushと対になるメソッドで、削除した要素を返り値として取得できます。pushとpopを組み合わせることで、LIFO(Last In First Out)のスタックデータ構造を実装できます。データの一時保存や、直近の操作の取り消しなどで活用されます。
初級array
問題41: unshiftメソッド
unshiftメソッドを使って配列の先頭に要素を追加する方法を学びましょう。pushメソッドが末尾に追加するのに対し、unshiftは先頭に追加します。既存の要素は全て後ろにずれ、インデックスが変更されます。複数の要素を一度に追加することも可能で、引数として渡した順番で先頭から挿入されます。キュー(FIFO)データ構造の実装や、新着データを先頭に表示したい場合などで活用されます。
初級array
問題42: shiftメソッド
shiftメソッドを使って配列の先頭から要素を削除する方法を学びましょう。popメソッドが末尾から削除するのに対し、shiftは先頭から削除します。削除された要素は返り値として取得でき、残りの要素は全て前にシフトされてインデックスが変更されます。unshiftと組み合わせることで、キュー(FIFO)データ構造を実装できます。待ち行列の処理や、古いデータから順に処理したい場合などで活用されます。
初級array
問題43: indexOfメソッド
indexOfメソッドを使って配列内の特定の要素を検索し、そのインデックスを取得する方法を学びましょう。配列の先頭から検索を開始し、最初に見つかった要素のインデックスを返します。要素が存在しない場合は-1を返すため、存在チェックにも使用できます。第2引数で検索開始位置を指定することもでき、重複する要素から特定のものを探す場合に便利です。データの存在確認や位置特定など、実務で頻繁に使用される重要なメソッドです。
初級object
問題44: オブジェクトリテラル
オブジェクトリテラル記法を使ってオブジェクトを作成する方法を学びましょう。JavaScriptのオブジェクトは、キーと値のペアでデータを管理する重要なデータ構造です。波括弧{}を使い、プロパティ名(キー)と値をコロンで区切って定義します。複数のプロパティはカンマで区切り、値には文字列、数値、配列、他のオブジェクトなど、あらゆるデータ型を格納できます。実世界のエンティティ(人、商品、設定など)を表現する際の基本となる概念です。
初級object
問題45: プロパティアクセス - ドット記法
ドット記法を使ってオブジェクトのプロパティにアクセスする方法を学びましょう。最も一般的なプロパティアクセス方法で、オブジェクト名の後にドット(.)を付け、その後にプロパティ名を記述します。ネストしたオブジェクトの場合は、ドットを連続して使用して深い階層のプロパティにもアクセスできます。プロパティ名が事前に分かっている場合に使用し、コードの可読性が高いのが特徴です。存在しないプロパティにアクセスした場合はundefinedが返されます。
初級object
問題46: プロパティアクセス - ブラケット記法
ブラケット記法を使ってオブジェクトのプロパティにアクセスする方法を学びましょう。ドット記法とは異なり、プロパティ名を文字列として指定できるため、動的なプロパティアクセスが可能です。特に、ハイフンやスペースを含むプロパティ名、数字で始まるプロパティ名、予約語と同じ名前のプロパティにアクセスする場合は、ブラケット記法を使用する必要があります。また、変数に格納されたプロパティ名でアクセスする際にも必須です。
初級object
問題47: プロパティの追加
オブジェクトに新しいプロパティを追加する方法を学びましょう。JavaScriptのオブジェクトは動的で、実行時にプロパティを追加、変更、削除できます。ドット記法またはブラケット記法を使って、存在しないプロパティに値を代入すると、自動的に新しいプロパティが作成されます。この機能により、柔軟なデータ構造を作成でき、ユーザー入力やAPIレスポンスに基づいて動的にオブジェクトを構築することが可能です。
初級object
問題48: プロパティの削除
delete演算子を使ってオブジェクトからプロパティを削除する方法を学びましょう。不要になったプロパティを削除することで、メモリを効率的に使用し、オブジェクトをクリーンに保つことができます。delete演算子は成功するとtrueを、失敗するとfalseを返しますが、通常のプロパティ削除ではほとんどの場合trueが返されます。削除後にそのプロパティにアクセスするとundefinedが返され、Object.keys()の結果からも除外されます。
初級object
問題49: メソッドの定義
オブジェクトのメソッド(オブジェクト内の関数)を定義する方法を学びましょう。メソッド内ではthisキーワードを使って、そのメソッドが属するオブジェクトのプロパティにアクセスできます。これにより、データとそれを操作する関数を一つのオブジェクトにまとめることができ、オブジェクト指向プログラミングの基礎となります。ES6では、メソッドの省略記法も導入され、より簡潔に書けるようになりました。
初級object
問題50: Object.keys
Object.keys()メソッドを使ってオブジェクトの全てのプロパティ名(キー)を取得する方法を学びましょう。このメソッドはオブジェクトのプロパティ名を配列として返すため、プロパティ数のカウント、特定のプロパティの存在確認、全プロパティへの繰り返し処理など、様々な用途に活用できます。返される配列は通常の配列なので、配列のメソッド(forEach、map、filterなど)を使って操作できます。
中
中級
無料で学習可能
中級array-methods
問題51: forEach メソッド
forEachメソッドを使って配列の各要素に対して処理を実行する方法を学びましょう。forEachは配列の各要素に対して指定した関数(コールバック関数)を順番に実行します。forループよりも関数型プログラミングのスタイルに近く、コードが簡潔になります。返り値はなく、主に副作用(コンソール出力、DOM操作、外部変数の更新など)を目的とした処理に使用します。コールバック関数は要素、インデックス、配列全体の3つの引数を受け取れます。
中級array-methods
問題52: map メソッド
mapメソッドを使って配列の各要素を変換し、新しい配列を作成する方法を学びましょう。mapは元の配列を変更せず、各要素に対して関数を適用した結果を要素とする新しい配列を返します。これは関数型プログラミングの基本的な概念で、データの変換や加工に非常に便利です。数値の計算、文字列の変換、オブジェクトのプロパティ抽出など、様々な用途に活用できます。forEachと違い、必ず新しい配列を返す点が重要です。
中級array-methods
問題53: filter メソッド
filterメソッドを使って配列から条件に合う要素だけを抽出する方法を学びましょう。filterは各要素に対してテスト関数を実行し、trueを返した要素だけを含む新しい配列を作成します。これにより、大量のデータから必要なものだけを簡単に絞り込むことができます。数値の範囲指定、文字列のパターンマッチング、オブジェクトのプロパティによるフィルタリングなど、実務で非常によく使用される重要なメソッドです。
中級array-methods
問題54: reduce メソッド基礎
reduceメソッドを使って配列の全要素を単一の値に集約する方法を学びましょう。reduceは配列の要素を左から右に順番に処理し、累積値(アキュムレータ)を更新しながら最終的に一つの値を生成します。合計、平均、最大値・最小値の計算、オブジェクトの構築、グループ化など、非常に幅広い用途があります。初心者には難しく感じられることがありますが、マスターすると非常に強力なツールとなります。
中級array-methods
問題55: find メソッド
findメソッドを使って配列から条件に合う最初の要素を見つける方法を学びましょう。findはfilterと似ていますが、条件に合う最初の要素をそのまま返す点が異なります。配列全体を検索する必要がないため、大量のデータから特定の要素を探す場合に効率的です。IDでの検索、条件に合う最初のユーザーの取得、特定のプロパティを持つオブジェクトの検索など、実務でよく使用されるパターンです。
中級array-methods
問題56: findIndex メソッド
findIndexメソッドを使って条件に合う最初の要素のインデックスを取得する方法を学びましょう。findが要素そのものを返すのに対し、findIndexはその要素の位置(インデックス)を返します。要素の位置が必要な場合、例えば配列から要素を削除したり、置き換えたりする場合に便利です。indexOfと違い、複雑な条件で検索できる点が特徴です。
中級array-methods
問題57: some メソッド
someメソッドを使って配列内に条件を満たす要素が少なくとも一つ存在するかを確認する方法を学びましょう。someは「いずれか一つでも」というOR条件的な確認に使用します。パフォーマンスの観点からも優れており、条件を満たす要素が見つかった時点で即座にtrueを返し、以降の要素はチェックしません。権限チェック、バリデーション、特定条件の存在確認などで活用されます。
中級array-methods
問題58: every メソッド
everyメソッドを使って配列のすべての要素が条件を満たすかを確認する方法を学びましょう。everyは「すべてが」というAND条件的な確認に使用します。someとは逆に、一つでも条件を満たさない要素が見つかった時点でfalseを返し、処理を終了します。データの整合性確認、全員の条件達成確認、バリデーションチェックなどで使用されます。
中級array-methods
問題59: sort メソッド
sortメソッドを使って配列の要素を並び替える方法を学びましょう。sortはデフォルトでは文字列として比較するため、数値のソートには比較関数が必要です。比較関数は2つの要素を受け取り、負の値、ゼロ、正の値を返すことで順序を決定します。重要なことに、sortは元の配列を直接変更する破壊的メソッドであるため、必要に応じてコピーを作成してからソートする必要があります。
中級array-methods
問題60: slice メソッド
sliceメソッドを使って配列の一部をコピーして新しい配列を作成する方法を学びましょう。sliceは元の配列を変更しない非破壊的メソッドで、指定した範囲の要素を含む新しい配列を返します。開始位置は含まれ、終了位置は含まれない点に注意が必要です。負のインデックスを使うと配列の末尾から数えることができ、柔軟な部分配列の取得が可能です。
中級array-methods
問題61: splice メソッド
spliceメソッドを使って配列の要素を削除、追加、置き換える方法を学びましょう。spliceは非常に強力なメソッドで、配列の任意の位置で要素の削除と挿入を同時に行えます。しかし、元の配列を直接変更する破壊的メソッドであるため、使用時には注意が必要です。削除された要素を配列として返すため、削除した内容も確認できます。
中級array-methods
問題62: includes メソッド
includesメソッドを使って配列に特定の要素が含まれているかを確認する方法を学びましょう。includesはシンプルで直感的なメソッドで、要素が存在すればtrue、存在しなければfalseを返します。indexOfを使った存在チェック(indexOf !== -1)よりも読みやすく、意図が明確です。NaNのチェックも正しく行える点が便利です。
中級functions
問題63: コールバック関数
コールバック関数の基本的な使い方を学びましょう。コールバック関数は、他の関数に引数として渡される関数のことで、JavaScriptの非常に重要な概念です。この仕組みにより、関数の振る舞いを動的に変更でき、柔軟で再利用可能なコードを書くことができます。配列の処理、イベントハンドリング、非同期処理など、JavaScriptのあらゆる場面で活用される基本的なパターンです。
中級functions
問題64: クロージャ基礎
クロージャの基本的な概念と使い方を学びましょう。クロージャは、関数とその関数が定義された環境(スコープ)の組み合わせです。内部関数が外部関数の変数を参照し続けることで、データのカプセル化とプライベート変数の実現が可能になります。この例では、カウンターを実装することで、クロージャがどのように状態を保持し、外部からアクセスできない変数を管理するかを理解します。
中級functions
問題65: 即時実行関数(IIFE)
即時実行関数(IIFE: Immediately Invoked Function Expression)の使い方を学びましょう。IIFEは、関数を定義した直後に実行するパターンで、グローバルスコープの汚染を避け、プライベートなスコープを作成するために使用されます。モジュールパターンの基礎として、また初期化処理を一度だけ実行したい場合にも利用されます。
中級functions
問題66: アロー関数の省略記法
アロー関数の省略記法をマスターしましょう。アロー関数は、単一の式を返す場合、中括弧{'}とreturn文を省略でき、より簡潔なコードが書けます。また、引数が1つの場合は括弧も省略可能です。ただし、オブジェクトリテラルを返す場合は特別な注意が必要です。
中級functions
問題67: Rest引数
Rest引数(残余引数)の使い方を学びましょう。Rest引数は、三点リーダー(...)を使って任意の数の引数を配列として受け取る機能です。これにより、可変長引数の関数を簡潔に定義でき、古いargumentsオブジェクトを使う必要がなくなりました。配列メソッドと組み合わせることで、柔軟な関数が作成できます。
中級functions
問題68: 関数のデフォルト値応用
オブジェクトの分割代入とデフォルト値を組み合わせた高度なテクニックを学びましょう。関数のパラメータでオブジェクトの分割代入を使い、各プロパティにデフォルト値を設定できます。さらに、パラメータ全体にもデフォルト値を設定することで、関数呼び出し時に引数を省略した場合の対応もできます。このパターンはAPIの設定オブジェクトやオプションパラメータの実装でよく使われます。
中級functions
問題69: 高階関数の作成
高階関数(関数を返す関数)の作り方と活用方法を学びましょう。高階関数は、特定の設定やパラメータを持った関数を動的に生成するための強力なパターンです。この例では、数値の乗算や加算を行う特化された関数を作成するファクトリー関数を実装します。クロージャと組み合わせることで、部分適用やカリー化のような関数型プログラミングの技法が実現できます。
中級functions
問題70: メソッドチェーン
メソッドチェーンの実装方法を学びましょう。メソッドチェーンは、複数のメソッドを連続して呼び出すことで、流れるようなインターフェースを提供するデザインパターンです。各メソッドがthisを返すことで、同じオブジェクトに対して次のメソッドを呼び出すことができます。jQueryやLodashなどのライブラリでも幅広く使われているパターンです。
中級functions
問題71: bind メソッド
bindメソッドの使い方を学びましょう。bindは関数のthisコンテキストを恒久的に固定し、新しい関数を作成します。メソッドを変数に代入したり、コールバックとして渡したりする際に、thisが失われる問題を解決できます。また、bindは部分適用(カリー化)の機能も持ち、引数を事前に固定した関数を作成できます。イベントハンドラーやReactのクラスコンポーネントなど、実際の開発で頻繁に使用される重要なメソッドです。
中級functions
問題72: call/apply メソッド
callとapplyメソッドの使い方を学びましょう。これらのメソッドは、関数を呼び出す際にthisコンテキストを動的に指定できます。callとapplyの違いは引数の渡し方で、callは個別に、applyは配列として渡します。これらは、他のオブジェクトのメソッドを借用したり、配列のメソッドを配列風オブジェクトに適用したり、Math.maxなどの可変長引数を取る関数に配列を渡したりする際に非常に有用です。
中級es6
問題73: 分割代入 - 配列
配列の分割代入(デストラクチャリング)を学びましょう。ES6で導入されたこの機能により、配列の要素を一度に複数の変数に代入できます。従来のインデックスアクセスよりも簡潔で読みやすいコードが書けます。要素のスキップ、デフォルト値の設定、残余要素の取得など、柔軟な記法が可能で、関数の戻り値が配列の場合や、変数の入れ替えなど、様々な場面で活用できる重要な機能です。
中級es6
問題74: 分割代入 - オブジェクト
オブジェクトの分割代入を学びましょう。ES6で導入されたこの機能により、オブジェクトのプロパティを個別の変数に簡潔に代入できます。従来のドット記法よりも短く、複数のプロパティを一度に抽出できます。デフォルト値の設定、ネストしたオブジェクトの分割、プロパティ名の変更など、柔軟な記法が可能です。APIレスポンスの処理、関数の引数としてのオブジェクト、Reactのprops処理など、モダンJavaScript開発で頻繁に使用される重要な機能です。
中級es6
問題75: 分割代入 - 名前変更
オブジェクト分割代入での変数名の変更を学びましょう。プロパティ名とは異なる変数名で値を取り出したい場合に使用します。既存の変数名との衝突を避けたり、より意味のある変数名にしたい場合に便利です。コロン記法を使用して、元のプロパティ名から新しい変数名へのマッピングを定義します。APIレスポンスのプロパティ名が冗長な場合や、複数のオブジェクトから同じプロパティ名を異なる変数に代入する場合など、実践的な場面で活用される機能です。
中級es6
問題76: スプレッド構文 - 配列
配列のスプレッド構文(展開構文)を学びましょう。ES6で導入されたこの機能は、配列の要素を個別の値として展開します。配列の浅いコピー、複数配列の結合、関数への引数展開など、様々な用途があります。従来のArray.prototype.slice()やArray.prototype.concat()よりも直感的で読みやすいコードが書けます。イミュータブルな配列操作、可変長引数の処理、配列の変換など、モダンJavaScriptの配列操作において欠かせない機能です。
中級es6
問題77: スプレッド構文 - オブジェクト
オブジェクトのスプレッド構文を学びましょう。ES2018で導入されたこの機能は、オブジェクトのプロパティを新しいオブジェクトに展開します。オブジェクトの浅いコピー作成、複数オブジェクトのマージ、プロパティの上書きなどが簡単に行えます。イミュータブルな状態管理、オプションオブジェクトのデフォルト値設定、Reactの状態更新など、モダンJavaScript開発で頻繁に使用される重要な機能です。
中級es6
問題78: for...of ループ
for...ofループを学びましょう。ES6で導入されたこの構文は、イテラブルなオブジェクト(配列、文字列、Map、Setなど)の値を直接反復処理します。従来のforループやforEachよりも直感的で読みやすく、インデックスを気にする必要がありません。配列の処理、文字列の文字単位の操作、コレクションの反復など、モダンJavaScriptでの反復処理の基本となる重要な構文です。
中級es6
問題79: for...in ループ
for...inループを学びましょう。この構文はオブジェクトの列挙可能なプロパティ名(キー)を反復処理します。オブジェクトの全プロパティを処理したい場合や、動的なプロパティアクセスが必要な場合に便利です。ただし、プロトタイプチェーン上のプロパティも列挙されるため、必要に応じてhasOwnPropertyでのチェックが重要です。配列に対してはfor...ofを使うことが推奨されますが、オブジェクトのプロパティ処理には現在も有用な構文です。
中級es6
問題80: Map オブジェクト
Mapオブジェクトを学びましょう。ES6で導入されたMapは、キーと値のペアを保持するコレクションです。通常のオブジェクトと異なり、任意の型(オブジェクト、関数、プリミティブなど)をキーとして使用でき、挿入順序が保持されます。パフォーマンスが重視される場面や、キーの型が動的な場合、频繁な追加・削除が必要な場合など、通常のオブジェクトよりもMapが適しているケースが多くあります。
中級es6
問題81: Set オブジェクト
Setオブジェクトを学びましょう。ES6で導入されたSetは、重複のない一意な値の集合を管理するコレクションです。プリミティブ値でもオブジェクトでも、任意の型の値を格納できます。重複要素の除去、集合演算、ユニークなアイテムの管理など、様々な用途で活用されます。配列との相互変換も簡単で、スプレッド構文を使って配列から重複を取り除く標準的な手法として広く使われています。
中級es6
問題82: テンプレートリテラル応用
テンプレートリテラルの応用的な使い方を学びましょう。複数行文字列の作成、式の評価結果の埋め込み、関数呼び出しなど、柔軟な文字列処理が可能です。従来の文字列連結では難しかった、HTMLテンプレートの生成、メッセージのフォーマット、SQLクエリの構築など、多くの場面でコードの可読性を向上させます。インデントも保持されるため、整形された出力が簡単に得られます。
中級es6
問題83: オブジェクトの省略記法
ES6で導入されたオブジェクトの省略記法を学びましょう。プロパティ名と変数名が同じ場合、コロンと値の部分を省略できます。また、メソッド定義もfunctionキーワードを省略した短縮構文が使えます。これにより、より簡潔で読みやすいコードが書けます。特にAPIレスポンスの処理、オブジェクトリテラルの作成、モジュールのエクスポートなどで頻繁に使用される便利な機能です。
中級es6
問題84: 計算されたプロパティ名
ES6の計算されたプロパティ名を学びましょう。ブラケット記法を使って、実行時に動的にプロパティ名を決定できます。変数の値、文字列の連結、関数の返り値など、任意の式の評価結果をプロパティ名として使用できます。動的なデータ構造の作成、メタプログラミング、設定オブジェクトの生成など、実行時の柔軟性が必要な場面で威力を発揮します。
中級es6
問題85: クラス構文基礎
ES6のクラス構文を学びましょう。classキーワードを使ったオブジェクト指向プログラミングが、より直感的で読みやすい形で記述できます。内部的にはプロトタイプベースの継承を使っていますが、他のオブジェクト指向言語に似た構文で書けるため、学習コストが低くなります。コンストラクタ、メソッド、継承、staticメソッドなど、オブジェクト指向の主要機能をサポートしています。
中級es6
問題86: クラスの継承
ES6のクラス継承を学びましょう。extendsキーワードを使って、既存のクラスから新しいクラスを派生させることができます。親クラスの機能を継承しつつ、新しい機能を追加したり、既存の機能をオーバーライドしたりできます。superキーワードを使って親クラスのコンストラクタやメソッドにアクセスできます。オブジェクト指向プログラミングの基本的な設計パターンであり、コードの再利用性を高める重要な機能です。
中級es6
問題87: 静的メソッド
クラスのstaticメソッドを学びましょう。静的メソッドはクラス自体に属し、インスタンスを作成せずに直接呼び出せます。ユーティリティ関数、ファクトリーメソッド、定数の定義などに適しています。インスタンス固有のデータに依存しない処理をまとめるのに便利で、Mathクラスのメソッド(Math.max()など)が代表的な例です。モジュールパターンとしても活用されます。
中級async
問題88: setTimeout
setTimeoutによる遅延実行を学びましょう。指定した時間後に一度だけ関数を実行する非同期処理の基本です。アニメーション、デバウンス処理、遅延ローディング、タイムアウト処理など、様々な場面で活用されます。clearTimeoutを使ってタイマーをキャンセルできるため、条件によって実行を取り消すことも可能です。JavaScriptのイベントループを理解する上でも重要な機能です。
中級async
問題89: setInterval
setIntervalによる定期実行を学びましょう。指定した間隔で繰り返し関数を実行する機能で、アニメーション、ポーリング処理、リアルタイム更新、カウントダウンタイマーなどに使われます。clearIntervalで停止できるため、条件によって動的に実行を制御できます。ただし、処理が長い場合は次の実行タイミングに影響するため、設計に注意が必要です。
中級async
問題90: Promise基礎
Promiseを使った非同期処理の基礎を学びましょう。Promiseは非同期処理の結果を表すオブジェクトで、成功(fulfilled)または失敗(rejected)の状態を持ちます。コールバック地獄を避け、より読みやすい非同期コードを書くことができます。API通信、ファイル読み込み、タイマー処理など、モダンJavaScriptの非同期処理の基礎となる重要な機能です。
中級async
問題91: Promise.then
Promiseのthenメソッドによるチェーン処理を学びましょう。thenメソッドはPromiseが成功したときの処理を定義し、新しいPromiseを返します。これにより、複数の非同期処理を連続して実行できます。各thenの返り値は次のthenの引数となるため、データの変換や加工をパイプラインのように組み立てられます。APIレスポンスの連続処理、データ変換パイプラインなどで活用されます。
中級async
問題92: Promise.catch
Promiseのcatchメソッドによるエラー処理を学びましょう。catchはPromiseチェーン内で発生したエラーを捕捉し、適切に処理するためのメソッドです。rejectされたPromiseや、then内でスローされたエラーをキャッチできます。エラーハンドリングは堅牢なアプリケーションの基本であり、ユーザーに適切なフィードバックを提供したり、エラーログを記録したりするために重要です。
中級async
問題93: Promise.finally
Promiseのfinallyメソッドを学びましょう。finallyはPromiseの成功・失敗に関わらず必ず実行される処理を定義します。リソースの解放、ローディング表示の非表示、ログの記録など、結果に依存しないクリーンアップ処理に最適です。データベース接続のクローズ、ファイルハンドルの解放など、実務で重要なパターンです。
中級async
問題94: async関数
async関数の基本を学びましょう。asyncキーワードを付けた関数は、常にPromiseを返します。明示的にPromiseを返さなくても、返り値は自動的にPromiseでラップされます。これにより、非同期処理をより直感的に書けるようになります。awaitと組み合わせることで、同期的なコードのように非同期処理を記述でき、コードの可読性が大幅に向上します。
中級async
問題95: await式
await式の使い方を学びましょう。awaitはPromiseの解決を待ち、その結果を取得します。非同期処理を同期的なコードのように書けるため、コールバック地獄やPromiseチェーンの複雑さを避けられます。awaitはasync関数内でのみ使用でき、複数の非同期処理を順番に実行したり、結果を変数に代入したり、分割代入と組み合わせたりできます。モダンJavaScriptの非同期処理のスタンダードです。
中級async
問題96: try-catch-finally
async/awaitのエラー処理を学びましょう。非同期関数内でtry-catch-finallyを使用すると、Promiseのthen/catch/finallyと同じように、エラーハンドリングとクリーンアップ処理を同期的な構文で記述できます。tryブロックで非同期処理を実行し、catchブロックでエラーを捕捉し、finallyブロックで成功・失敗に関わらず実行される後処理を記述します。これにより、エラー処理が直感的になり、コードの可読性が向上します。
中級async
問題97: Promise.all
Promise.allによる並列実行を学びましょう。Promise.allは複数のPromiseを並列に実行し、全てが完了するまで待機します。全て成功した場合は結果の配列を返し、一つでも失敗した場合は即座にエラーを投げます。複数のAPIコールやデータ取得を並列に実行したい場合、全てのデータが揃ってから次の処理を行いたい場合に便利です。逐次処理よりもパフォーマンスが向上します。
中級async
問題98: Promise.race
Promise.raceによる競争的実行を学びましょう。Promise.raceは複数のPromiseを同時に実行し、最初に完了(解決または拒否)したものの結果を返します。タイムアウト処理の実装、最速のサーバーからのレスポンス取得、キャンセル可能な操作の実装などに活用されます。例えば、APIコールと5秒以内に完了しなければタイムアウトエラーを返すような処理を簡潔に実装できます。
中級async
問題99: fetch API基礎
fetch APIとasync/awaitを使用したHTTP通信を学びましょう。fetchはブラウザの標準APIで、HTTPリクエストを送信してPromiseを返します。response.okプロパティでHTTPステータスの成功を確認し、response.json()メソッドでJSONレスポンスをパースします。現代的なWebアプリケーションではREST APIとの通信が不可欠であり、async/awaitと組み合わせることでクリーンな非同期通信コードが書けます。
中級async
問題100: async/awaitループ
ループ内での非同期処理の順次実行を学びましょう。for...ofループ内でawaitを使用すると、各非同期処理を順番に実行できます。これは、前の処理が完了してから次の処理を開始したい場合や、順序が重要なデータ処理で役立ちます。例えば、複数のファイルを順番に処理したり、APIコールの結果を基に次のコールを行う場合に使用します。ただし、並列処理が可能な場合はPromise.allを使う方がパフォーマンスが良いことに注意しましょう。
中級dom
問題101: getElementById
getElementByIdメソッドによるDOM要素の取得を学びましょう。document.getElementByIdはHTML要素のid属性で指定して、該当する単一の要素を取得します。IDはページ内で一意である必要があり、高速に要素を取得できます。要素が存在しない場合はnullが返されるため、必ずnullチェックを行いましょう。フォームや特定のコンテナなど、特定の要素に直接アクセスしたい場合に最もよく使用されます。
中級dom
問題102: querySelector
querySelectorメソッドによるCSSセレクタを使った要素取得を学びましょう。document.querySelectorはCSSセレクタを使用して柔軟に要素を検索でき、クラス名(.で開始)、ID(#で開始)、タグ名、属性、擬似クラスなど、あらゆるCSSセレクタが使用可能です。複数の要素がマッチしても最初の一つだけを返します。getElementByIdよりも柔軟で、複雑な選択が可能なため、現代的なJavaScriptでは非常によく使われます。
中級dom
問題103: querySelectorAll
querySelectorAllメソッドによる複数要素の取得を学びましょう。document.querySelectorAllはCSSセレクタにマッチする全ての要素をNodeListとして返します。NodeListは配列のように扱えますが、完全な配列ではありません。forEachメソッドやfor...ofループで処理でき、lengthプロパティで個数を取得できます。複数のボタンやリストアイテムなど、同じ種類の要素に対して一括操作を行いたい場合に非常に便利です。
中級dom
問題104: addEventListener
addEventListenerメソッドによるイベントリスナーの登録を学びましょう。addEventListenerはDOM要素にイベントハンドラを追加する標準的な方法で、同じイベントに複数のハンドラを登録でき、イベントの伝播やキャプチャリングを制御できます。クリック、マウス移動、キーボード入力、フォーム送信など、あらゆるユーザーインタラクションを処理するために不可欠です。古いonclick属性よりも柔軟で強力です。
中級dom
問題105: removeEventListener
removeEventListenerメソッドによるイベントリスナーの削除を学びましょう。removeEventListenerはaddEventListenerで登録したイベントハンドラを削除し、メモリリークを防ぐ重要なメソッドです。削除するためには、登録時と全く同じ関数参照を渡す必要があるため、アロー関数ではなく名前付き関数を使用するか、関数を変数に保存する必要があります。一時的なイベント処理や、コンポーネントのクリーンアップ時に必須です。
中級dom
問題106: createElement
createElementメソッドによる動的なDOM要素の作成を学びましょう。document.createElementはJavaScriptから新しいHTML要素を作成するメソッドで、タグ名を引数に指定して要素を生成します。作成された要素はメモリ上に存在し、appendChildなどでDOMに追加するまでは表示されません。動的なUIの構築、リストの動的生成、ユーザー入力に基づくコンテンツの生成など、現代的なWebアプリケーションで必須の機能です。
中級dom
問題107: appendChild
appendChildメソッドによるDOM要素の追加を学びましょう。appendChildは親要素に子要素を追加する最も基本的なメソッドで、指定した要素を親要素の最後の子として追加します。既に別の場所に存在する要素を追加した場合、その要素は移動されます(コピーされません)。動的なリストやテーブルの構築、フォーム要素の動的追加など、DOM操作の中核となるメソッドです。
中級dom
問題108: classList操作
classList APIによるCSSクラスの操作を学びましょう。classListは要素のclass属性を操作するためのモダンなAPIで、add、remove、toggle、containsなどのメソッドを提供します。古いclassNameプロパティの操作よりも安全で便利で、空白を含むクラス名の扱いや重複追加の防止などが自動的に処理されます。アニメーション、テーマ切り替え、状態管理など、CSSを通じた動的なUI制御に不可欠です。
中級dom
問題109: textContent vs innerHTML
textContentとinnerHTMLの違いと適切な使い分けを学びましょう。textContentは要素のテキスト内容を取得・設定し、HTMLタグは文字として扱われるためXSS攻撃に安全です。一方、innerHTMLはHTMLとして解釈されるため、動的なHTML構造の生成に便利ですが、ユーザー入力を直接設定するとXSS攻撃のリスクがあります。セキュリティを考慮し、ユーザー入力にはtextContent、信頼できるHTMLにはinnerHTMLを使用しましょう。
中級dom
問題110: イベントオブジェクト
イベントオブジェクトの構造と使用方法を学びましょう。イベントハンドラが呼び出されるとき、イベントに関する詳細情報を含むイベントオブジェクトが引数として渡されます。type(イベント種別)、target(イベント発生元)、currentTarget(リスナー登録元)、preventDefault()(デフォルト動作のキャンセル)、stopPropagation()(イベント伝播の停止)など、イベント処理に必要なすべての情報とメソッドが含まれています。