1995年JavaScriptはNetscape Navigator.2.0というブラウザに実装されて登場
同じころ、Microsoft社によってJScriptがInternet Explorer 3.0に実装された。
上記両者に互換性がなかったため、1997年ECMA InternationalによってECMAScriptとして標準化された。
| break | case | catch | class | const |
| continue | debugger | default | delete | do |
| else | export | extends | finally | for |
| function | if | import | in | instanceof |
| new | retuirn | super | switch | this |
| throw | try | typeof | var | void |
| while | with | enum |
strictモードはスクリプト実行時に厳しくエラーチェックするモード。
| implements | let | private | public |
| yield | interface | package | protected |
| static |
文字列定義にはシングルクォート(')、ダブルクォート(")、バッククォート(`)を使う。バッククォートで${}が使える。
| 名称 | 表現形式 |
|---|---|
| 10進数 | 1,2,3,1010... |
| 2進数 | 0b11,0B11 |
| 8進数 | 0o10,0O727 |
| 16進数 | 0xf0a0,0X0f90 |
Number型では表せない大きな範囲を表す。BigInt型とNumber型は混在できない。小数点は切り捨て。表現:1003435505n(サフィックスにnを付加)。
True or False
nullは参照を保持していないことを表す。アドレスすら持たないことを意味する。
変数が未定義のときの値
letによる宣言、宣言時に値によって型が自動的に定まる。
宣言時に型を指定する。
型変換関数を利用
変数が呼び出し時点に自動的に型変換される。JavaScriptは一つの分に複数のデータ型の値が含まれる場合は、型情報を統一して処理を行う。
トップへ戻るfalse,0,-0,0n,"",null,undefined,NaN
| 構文 | 説明 |
|---|---|
| if(条件式){}else if(条件式){}else{} | 条件分岐 |
| switch(引数){case 条件式1:文1;break;case 条件式2:文2;break;} | 多分岐 |
| try{throw エラー構文;}catch(エラー変数){}finally{} | 例外処理 |
| while(条件式){} | 繰り返し構文 |
| for(初期化処理;条件式;最終処理){} | 繰り返し構文 |
| for(let 変数名 in 変数名){} | 繰り返し構文。列挙可能プロパティを持つオブジェクトで列挙可能性がtrueのものを繰り返すことができる。(Symbol型のプロパティは対象外) ※Arrayでは配列のindexが列挙される。 |
| for(const 変数名 of 変数名){} | 繰り返し構文(反復可能オブジェクト[Array,Map,Set]) ※Arrayでは配列のvalueが列挙される。 |
| ラベル名:{break ラベル名;} | ラベル構文 |
| ラベル名:{continue ラベル名;} | ラベル構文 |
| 構文 | 説明 |
|---|---|
| function 関数名(引数1,引数2,...){ return 戻値;} | 関数の定義。引数が多い場合は無視、少ない場合はundefinedとして処理される。名前が重複した場合は末尾の関数を実行。関数の実行文を定義文の前に記述できる。オブジェクトを渡す場合は参照渡しとなる。関数内で他のオブジェクトを代入すると、参照が壊れる。 |
| const 関数名 = function(引数1,引数2,...){return 戻値;} | 関数式。名前が重複しているときは、エラーが発生。関数実行文を定義前に記述するとエラーとなる。 |
| let 変数 = 関数名(引数1,引数2,...); | 関数の戻値を格納 |
| 関数名(引数1,引数2,...); | 関数を実行 |
| var 変数名 = {function(){},function(){},function(){}…}; | 配列に関数を定義 |
| function 関数名(){return function(){return 値;};} | 戻値に関数を利用 |
| 関数名()(); | 関数の戻値に関数が帰ってくる時、後ろの()に帰ってきた関数の引数を指定して実行 |
| const 関数名 = new Function("引数1","引数2",...,"本文"); | Functionコンストラクタによる関数定義。引数や記述を文字列として記述する。 |
| function(引数名1 = 初期値1,引数名2 = 初期値2,...){return 戻値;} | デフォルト引数を設定する場合。最初の引数に値を渡さない場合はundefinedを指定する必要がある。 |
| function(引数1,引数2,...){return 戻値;} | 無名関数。コールバック関数としても利用可能。 |
| (function(引数){return 値;})(引数); | 無名関数をそのまま利用 |
| () => {関数の本文;}; | アロー関数。無名関数の略記 |
| 引数 => {関数の本文;}; | 引数が一つのアロー関数 |
| (引数1,引数2,...) => {関数の本文;}; | 引数が複数のアロー関数 |
| (引数1,引数2,...) => 関数の本文; | 本文が一行のアロー関数 |
| (引数1,引数2,...) => ({プロパティ:値1,プロパティ:値2}) | オブジェクトが戻値のアロー関数 |
| arguments[インデックス] | 関数に渡される引数の配列、関数内部のみで利用可能。 |
| キーワード | 無名関数 | アロー関数 |
|---|---|---|
| this | 有 | 無 |
| argument | 有 | 無 |
| new | インスタンス化可能 | インスタンス化不可能 |
| prototype | 有 | 無 |
| 種類 | 概要 |
|---|---|
| グローバルスコープ | var,関数宣言によるトップレベルスコープ。どこからでも参照可能。異なるscriptタグからも参照可能。windowオブジェクトに保持される。おそらくブラウザが切断されるまでこのスコープは保持される。 |
| スクリプトスコープ | let,constによるトップレベルスコープ。基本的にはグローバルスコープと区別せずに使える。しかしwindowオブジェクトとしては保持されない。 |
| 関数スコープ | 関数内で宣言された変数や関数が属するスコープ。他の関数スコープに配置された変数や関数を使うことはできない。 |
| ブロックスコープ | ブロック内で、letやconstで宣言された変数や関数が属するスコープ。他のスコープに配置された変数や関数を使うことはできない。 |
| モジュールスコープ | ESModulesが有効な時のトップレベルスコープ。scriptタグの単位でモジュールが形成されるため、他のモジュール内の変数や関数を参照できなくなる。 |
thisを利用した場合にはwindowオブジェクトとなる。オブジェクト内で利用する場合は一つ上位のオブジェクトを指す。アロー関数の場合はthisを持たないためレキシカルスコープを参照する。コールバック関数の場合は渡された関数を定義するオブジェクト内のものとして実行するわけではないため、コールバックした関数内の要素としてthisを扱う。
コードが実行される前にJavaScriptエンジンによって準備されるコードの実行環境のこと。どのような状態でコードが実行されるのかとういう情報が実行コンテキストごとに保持される。
実行コンテキストの積み重ね。
クラスの記法はES6から
インスタンス化せずに利用できる。
スタティックメソッド、スタティックプロパティとも言う。
スタティックメソッドからインスタンスメソッドやプロパティは参照できない。
インスタンスからはクラス名.メソッド名()、クラス名.プロパティ名または、this.constructorを使って参照できる。
オブジェクト名.ゲットプロパティ名;
オブジェクト名.セットプロパティ名 = 値;
オブジェクト名 isntanceof クラス名
クラス名で指定したクラス又は子クラスであればTrueを返す。すべてのクラスはObjectクラスを継承している。
JavaScriptはプロトタイプベース言語と呼ばれていて、言語使用の根底にプロトタイプという仕組みがある。→プロパティ名:prototype
オブジェクトのプロパティや関数を参照するときオブジェクト内に当該物がない場合は__proto__を参照しに行くが、そこにもない場合はその下位にある__proto__を参照する。
他のオブジェクトの機能を引き継ぐことを継承、他のコンストラクタのprototypeを継承することをプロトタイプ継承という。
クラスとコンストラクタ関数をまとめてコンストラクタと言う場合がある。
JavaScriptエンジンにあらかじめ提供されているオブジェクト群
開発者がブラウザを操作するためのWeb APIが格納されている。コードを実行する前にwindowという識別子で使用可能な状態となっている。グローバルオブジェクト(グローバルオブジェクト名を省略して記述できる)。
| メソッド名/構文 | 戻値 | 説明 |
|---|---|---|
| setTimeout(fn,delay,arg1,arg2,...) | timeoutID | fn:関数、delay:ミリ秒後実行するタスクを登録する。argで渡した引数がfnの引数。timeoutIDはclearTimeoutで使用する。 |
| setInterval(fn,interval,arg1,arg2,...) | intervalID | fn:関数、interval:ミリ秒後に実行するタスクを登録する。argで渡した引数がfnの引数。intervalIDはclearIntervalで使用する。 |
| requestAnimationFrame(fn) | requestID | fn:関数の実行を次の再描画の前に行うタスクを登録する。画面描写処理を邪魔したくないときに利用する。 |
| queueMicrotask(fn) | undefined | fn:関数をマイクロタスク(ジョブキュー)に登録する。 |
| clearTimerout(timeoutID) | undefined | timeoutIDのタスクをキャンセルする。 |
| clearInterval(intervalID) | undefined | intervalIDのタスクをキャンセルする。 |
| cancelAnimationFrame(requestID) | undefined | requestIDのタスクをキャンセルする |
| btoa(str) | encodedStr | str:文字列をBase64形式のエンコード文字列(encodedStr)に変換する。 |
| atob(encodedStr) | str | Base64形式のエンコード文字列(encodedStr)を文字列(str)に変換する。 |
| alert(str) | undefined | 文字列(str)を画面ダイアログに表示する。 |
| confirm(str) | result | 質問(str)と[OK]、[キャンセル]ボタンを含むダイアログを画面に表示する。OKの場合はresultにtrueが返される。 |
| prompt(question,default) | inputStr | question:質問のテキストが入力可能なダイアログを出力する。入力欄のデフォルト値はdefaultで設定可能。入力文字(inputStr)が戻値となる。 |
| close() | undefined | 現在表示中のウィンドウを閉じる |
| open(url,windowName,windowFeatures) | undefined | urlで指定したページをwindowNameで指定した画面で開く。新しい画面で開く時には、windowNameに_blankを入力する。表示位置やサイズはwindowFeaturesで指定可能。 |
| scrollBy(x,y) scrollBy({top:y,left:x,behavior:auto(ブラウザの判断に任せる)|instant(一瞬でスクロールする)|smooth(滑らかにスクロールする),}) | undefined | 現在の画面左上を基準としてx,yだけスクロールする。(x,yはピクセル値)オプションを指定する時はオブジェクト形式。 |
| scroll(x-coord,y-coord) scrollTo(x-coord,y-coord) scroll({top:y,left:x,behavior:auto(ブラウザの判断に任せる)|instant(一瞬でスクロールする)|smooth(滑らかにスクロールする),}) scrollTo({top:y,left:x,behavior:auto(ブラウザの判断に任せる)|instant(一瞬でスクロールする)|smooth(滑らかにスクロールする),}) | HTMLの左上を基準としたx,yの指定量をスクロールする。オプションを指定する場合はオブジェクト形式 | |
| postMessage(message,targetOrigin,transfer) | undefined | Windowオブジェクト間のメッセージのやり取りを行う。主にページに埋め込まれたiframeのWindowオブジェクトと親のWindowオブジェクト間でのメッセージのやり取りに使われる |
| プロパティ | 説明 |
|---|---|
| innerWidth | ブラウザウィンドウの内側境界線の横幅(ページの表示部分)。スクロールバーを含む |
| innerHeight | ブラウザウィンドウの内側境界線の縦幅(ページの表示部分)。スクロールバーを含む |
| outerWidth | ブラウザ自体の横幅。innerWidthと同一とも言える。 |
| outerHeight | ブラウザ自体の縦幅。 |
| pageXOffsetscrollX | Webページの水平方向へのスクロール量をピクセル数で返す。 |
| pageYOffsetscrollY | Webページの垂直方向のスクロール量をピクセル数で返す。 |
| screenLeftscreenX | ディスプレイの左端からブラウザウィンドウの左端までの値を返す。 |
| screenTopscreenY | ディスプレイの上端からブラウザウィンドウの上端までの値を返す。 |
| self | Windowオブジェクトのエイリアス |
| frames | window内のiframeを配列風オブジェクトとして返す。(array-like) |
| parent | 現在のwindowの親のWindowオブジェクトを返す。iframeなどのさぶwindowで使用する。 |
| top | ウィンドウの階層での最上位のwindowオブジェクトを返す。 |
| undefined | 未定義であることを意味するUndefined型の値 |
DateオブジェクトはUTCの1970/01/01/00:00からの経過時間をミリ単位で保持している
| フォーマット | 意味 |
|---|---|
| YYYY | 年を4桁 |
| MM | 0~12までの月 |
| DD | 01~31までの日 |
| T | 日付と時刻をTをつなげて表記 |
| HH | 00~23までの時間 |
| mm | 00~59までの分 |
| ss | 00~59までの秒 |
| sss | 1桁以上でミリ秒を表す |
| TZD | Z:UTC,+hh:mm,-hh:mmでUTCからの相対的な経過時間を表す。UTCから-hh:mmの場所をUTC時刻の時へ戻す。 |
| メソッド | 戻値 | 説明 |
|---|---|---|
| 値を取得するメソッド | ||
| getDate() getUTCDate() | dateInt | Dateオブジェクトの日を数値で返す |
| getDay() getUTCDay() | dayInt | Dateオブジェクトの曜日を数値で返す。0(日曜日)~6(土曜日) |
| getMonth() getUTCMonth | monthInt | Dateオブジェクトの月を数値で返す。0(1月)~11(12月) |
| getFullYear() getUTCFullYer() | yyyy | Dateオブジェクトの年を4桁で返す。 |
| getyear() | yearInt | 1900を引いた都市を2桁または3桁の数値で返す。(使用禁止されている) |
| getHours() getUTCHours | hourInt | Dateオブジェクトの時を数値で返す。 |
| getMinutes() getUTCMinutes() | minuteInt | Dateオブジェクトの分を数値で返す。 |
| getSeconds() getUTCSeconds() | minuteInt | Dateオブジェクトの秒を数値で返す |
| getMilliseconds() getUTCMilliseconds() | msInt | Dateオブジェクトのミリ秒を数値で返す |
| getTime() | ms | 1970/01/01 00:00からの経過時間をミリ秒(ms)で取得する。 |
| getTimezoneOffset() | tzdOffset | 現地のタイムゾーンから見たUTC+0との時差を分単位の数値で取得 |
| toString | datetimeStr | Dateオブジェクトの日時を文字列で返す |
| toISOString() | datetimeStr | Dateオブジェクトの日時をISO8601表記の文字列で返す |
| toJSON | jsonStr | DateオブジェクトをJSONで使用するために文字列に変換する。(toISOStringと同じ文字列が取得される。) |
| toDateString() | dateStr | Dateオブジェクトの年月日を文字列(dateStr)で返す。 |
| toDateString() | dateStr | Dateオブジェクトの年月日を文字列で返す。 |
| toTimeString() | timeStr | Dateオブジェクトの現地時間を文字列で返す。 |
| toLocaleString(locales,options) | datetimeStr | ロケール(locales)、オプション(options)に合わせたDateオブジェクトの日時を文字列で返す。 |
| toLocaleDateString(locales,options) | dateStr | ロケール(locales)、オプション(options)に合わせたDateオブジェクトの現地時間を文字列で返す。 |
| toLocaleTimeString(locales,options) | timeStr | ロケール(locales)、オプション(options)に合わせたDateオブジェクトの現地時間を文字列で返す。 |
| toUTCString() | utcDatetimeStr | Dateオブジェクトの現地時刻をUTC時刻で表す文字列に変換する。 |
| 値を設定するメソッド | ||
| setDate(dateInt) | ms(1970/01/01 00:00からの経過時間(ミリ秒)) | Dateオブジェクトの日を数値で設定する。月末日を超える場合には、月が1繰り上がる。0を設定すると前月の末尾が取得される。 |
| setMonth(monthInt) setUTCMonth(monthInt) | ms | Dateオブジェクトの月を数値で設定する。0(1月)~11(12月)。11を超える場合には年が1繰り上がる。 |
| setFullYear(yyyy,monthInt,dateInt) | ms | Dateオブジェクトの年、月、日を数値で設定する。 |
| setYear(yyyy) | ms | Dateオブジェクトの年を数値で設定する。使用禁止されている。 |
| setHours(hourInt) setUTCHours(hourInt) | ms | Dateオブジェクトの時を数値で設定する。23を超えるときは日が1繰り上がる。 |
| setMinutes(minuteInt) setUTCMinutes(minuteInt) | ms | Dateオブジェクトの分を数値で設定する。59を超える場合には、時が1繰り上がる |
| setSeconds(secondInt) setUTCSeconds(secondInt) | ms | Dateオブジェクトの秒を数値で設定する。59を超える場合には分が1繰り上がる |
| setMilliseconds(msInt) setUTCMilliseconds(msInt) | ms | Dateオブジェクトのミリ秒を数値で設定する。999を超える場合には秒が1繰り上がる |
| setTime(ms) | ms | 1970/01/01 00:00からの経過時間をミリ秒で設定する。 |
| Dateの静的メソッド | ||
| UTC(年,月,日,時,分,秒,ミリ秒) | utcDatetime | UTC時刻でDateオブジェクトを生成し返す。。 |
| now() | ms | 1970/01/01 00:00から現在までの経過時間をミリ秒で取得。 |
| parse(datetimeStr) | ms | 1970/01/01 00:00から日付フォーマット文字列の時刻までの経過時間をミリ秒で取得。 |
| メソッド | 戻値 | 説明 |
|---|---|---|
| test(testStr) | 真偽値 | 正規表現がtestStr内で一致する場合には、trueを返す。それ以外にはfalseを返す。 |
| exec(testStr) | 配列|null | testStrから正規表現で一致した抽出結果を配列として返す。一致箇所がない場合にはnull |
| match(regex) | 配列|null | 文字列とregexの一致結果を配列で返す。[0]:マッチング文字列 [n]:()を使った抽出箇所が要素に追加される [index]:一致個所の開始インデックス [input]:入力文字(testStr) |
| matchAll(regex) | iteratorObject | 文字列とregexのすべての一致箇所をイテレータとして返す。 |
| replace(regex,replaceStr) | replacedStr | 正規表現での一致箇所をreplaceStrで置換した文字列を返す。 |
| search(regex) | index|-1 | 正規表現 |
| split(separator,limit) | 配列 | 文字列がseparatorによって分割された配列を返す。分割数の上限はlimitで指定可能。separatorには正規表現又は文字列を使用可能。 |
| 文字 | 説明 |
|---|---|
| . | 改行文字以外の任意の1文字に一致する。(\n[U+000A]、\r[U+000D]、ラインセパレータ[U+2028]、段落区切り文字[U+2029]以外に一致する。 |
| [abc] | []内のいずれか1文字に一致する。 |
| [^abc] | [^]内の文字以外の1文字に一致する。 |
| [a-z] [A-Z0-9] | 上段は半角英字小文字、下段は半角英字大文字または0~9の1文字に一致する。 |
| \w | 半角英数字または_のうち1文字に一致する。 |
| \W | \w以外の1文字に一致する。 |
| \d | 0~9の1文字に一致する |
| \D | \d以外の1文字に一致する |
| \s | スペース、タブ、改ページ、改行を含むホワイトスペース1文字に一致する。(\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff)の1文字 |
| \S | \s以外の1文字に一致する。 |
| \n | 改行文字(U+000A)に一致する |
| \r | 復帰文字(キャリッジリターン)に一致する。 |
| \t | タブ(U+0009)に一致する。 |
| \v | 垂直タブ(U+000Bに一致する。 |
| ^ | 文頭一致を行う。(mフラグが有効な場合には改行文字の直後の一致も判定対象になる。) |
| $ | 文末一致を表す。(mフラグが有効な場合には改行文字の直前の一致も判定対象になる) |
| {n} {m,n} {m,} | {n}直前の文字がn回繰り返す場合に一致する {m,n}直前の文字がm回~n回繰り返す場合に一致する {m,}直前の文字がm回以上繰り返す場合に一致する |
| + | 直前の文字1回以上の繰り返しを表す。 |
| * | 直前の文字0回以上の繰り返しを表す。 |
| ? | 直前の文字が0回または1回繰り返す場合に一致する。(*,+,?,{}の後ろに使った場合には最短一致になる。最短一致:マッチング箇所が最短になることを言う) |
| (abc) | ()で囲んだ部分をパターンマッチ箇所として、後方参照で使用できる。後方参照とは、マッチングした箇所を後に再利用すること。 \数値:一致部分を再利用する。 $数値:一致部分を使って置換できる 配列に一致文字を格納する場合は()の箇所を後部に格納する。 |
| ab|cde | |の前後のいずれかの文字列に一致する。 |
| \ | 特殊文字を文字列として表す場合に使用する。 |
| フラグ | フラグ名 | 説明 |
|---|---|---|
| g | global | グローバルサーチ(複数一致)を行う。 |
| i | ignoreCase | 大文字・小文字を区別しない。 |
| m | multiline | 複数行検索を行う。^を行頭一致、$を行末一致として扱う。 |
| s | dotAll | ドットの一致対称に改行文字を含める |
| u | unicode | サロゲートペアに対応する完全なUnicode文字列としてパターンマッチを行う。 |
| y | sticky | lastIndexプロパティで示されたインデックスからの前方一致を判定する。 |
Web Storage APIはlocalStorageオブジェクト(ローカルストレージ)またはsessionStorageオブジェクト(セッションストレージ)から使うことができます。これらのオブジェクトは、JavaScriptエンジンによって自動的に作成されたStorageコンストラクタのインスタンスでJavaScriptのコードを実行する前に利用可能となっている。
| メソッド | 戻値 | 説明 |
|---|---|---|
| localStorage | ローカルストレージオブジェクト | |
| sessionStorage | セッションストレージオブジェクト | |
| localStorage.setItem(key,value) | undefined | ブラウザのデータ保存領域内にkeyとvalueを対で格納する。重複するキーがすでに保存料域内に存在する場合には、値の上書きとなる。また、キーと値に仕えるデータ型は文字列。文字列以外が渡された場合には、文字列に変換されてブラウザにデータが保存される。 |
| localStorage.getItem(key) | value|null | ブラウザのデータ保存領域内のkeyに一致するvalueを返す。キーが見つからない場合はnull。 |
| localStorage.removeItem(key) | undefined | ブラウザのデータ保存領域内のkeyに一致するキーと値のペアを削除する。 |
| localStorage.clear() | undefined | ブラウザのデータ保存領域内のすべてのキーと値のペアを削除する。 |
| localStorage.key(index) | keyName | indexを指定することでkeynameを取得する。 |
| localStorage.length | ストレージに保存されているキーと値のペアの個数を取得する。 | |
セッションストレージ(sessionStorage)はセッションが維持されている間に限り値が保持される。新しく開いたタブやウィンドウは異なるセッションとみなされる。ブラウザのタブやウィンドウを閉じた時点で、保存した値は自動的に消去される。
JSON(JavaScript Object Notation)はJavaScriptのオブジェクト構造を文字列で表すときに使う表記法。JSONを利用することで、オブジェクトのデータ構造をJSON文字列(JSON形式の文字列)に変換してサーバーに送信したり、サーバから受け取ったJSON文字列をオブジェクトに変換して利用したりできる。
| メソッド | 戻値 | 説明 |
|---|---|---|
| JSON.stringify(target,replacer,space) JSON.stringify(target,["name1","name2"]) | jsonStr | オブジェクトをJSON文字列へ変換。replacerには["name1","name2"]のように名前を指定してJSONへ変換する部分を指定できる。replacer関数をしていすることもできる。 |
| JSON.parse(jsonStr) | object,array,number,bool,null | JSON文字列をオブジェクトに変換 |
プリミティブ型の値の後に続けてラッパーオブジェクトのメソッドやプロパティを記述できる。また変数に代入しなければプリミティブ値はstring型とならない。プリミティブ値を利用する際はあくまでラッパーオブジェクトとして扱われる。
| 記述 | 説明 |
|---|---|
| const 変数名 = [値1,値2,値3]; | 配列定数の定義 |
| let 変数名 = [値1,値2,値3]; | 配列変数の定義 |
| 変数名[インデックス]; | 配列を引用 |
| const 配列 = new Array(length); | lengthの配列を定義 |
| const 配列 = new Array(value1,value2,...) | valueの要素を持つ配列を定義 |
| メソッド | 引数 | 戻値 | 説明 |
|---|---|---|---|
| 配列.push(追加したい要素1,追加したい要素2...) | 配列の末尾に要素を追加 | ||
| 配列.unshift(追加した要素1,追加したい要素2...) | 配列の先頭に要素を追加 | ||
| 配列.shift() | 配列の先頭の要素を削除する | ||
| 配列.pop() | 配列の末尾の要素を削除する | ||
| 配列.splice(startindex,length,addvalue1,addvalue2,...) | 特定の長さの分の要素を切り取る。 | ||
| 配列.concat(配列) | 別の配列を結合する | ||
| 配列.concat() | 同一の配列を複製(ディープコピー) | ||
| 配列.slice(startindex,endindex) | 指定範囲の配列の抽出 | ||
| 配列.indexOf(findvalue) | index:一致要素の位置 | 配列内で最初に一致した要素のindexを返す | |
| 配列.includes(findvalue) | bool | 値の存在確認。 | |
| 配列.join(str separate) | string | 配列をseparate文字で区切って文字列化 | |
| 配列.fill(defaultvalue,startindex,endindex) | 初期値を設定する。 | ||
| 配列.flat(dimension) | 多次元配列の平坦化 | ||
| 配列.revers() | 配列の要素の並びを逆にする |
配列の各要素を使って繰り返し処理を行う。
//結果
101,2,3,4,5
211,2,3,4,5
321,2,3,4,5
431,2,3,4,5
541,2,3,4,5
この場合コールバック関数でthisを使うと配列を参照することになる。
コールバック関数の戻値を要素にとる新しい配列を返す。
コールバック関数の戻値がtrueの時の配列の要素のみを配列として返す。
すべての要素の値が条件に一致するか
少なくとも一つの値が条件に一致するか
条件を満たした最初の要素の値を取得
並び替えの方法
引数メソッドの戻値と配列の値を順次処理し、最終的な戻値を返す。
| メソッド | 引数 | 説明 |
|---|---|---|
| Array.from(arraylike) | arraylike:配列的オブジェクト | 配列的オブジェクトを配列として作成 |
| Array.isArray(target) | target:配列かどうか判定する変数 | 引数を配列かどうか判定する。 |
| メソッド | 引数 | 説明 |
|---|---|---|
| 変数名.add(additem) | additem:追加したい要素 | 指定した要素を追加する |
| 変数名.delete(deleteitem) | deleteitem:削除したい要素 | 指定した要素を削除する |
| 変数名.clear() | コレクション内のすべての要素を削除する | |
| 変数名.has(searchitem) | serchitem:検索する要素 | 引数で指定した要素があるかどうか判定する。 |
変数.size :Setオブジェクトの要素数を返す
| メソッド | 引数 | 説明 |
|---|---|---|
| 変数名.set(key,value) | key:文字列,数値,真偽値,オブジェクトなど value:文字列,数値,真偽値,オブジェクトなど | 値を追加する |
| 変数名.get(key) | key:取得する値を示すkey | 値を取得する |
| 変数名.delete(key> | key:削除する値を示すkey | 値を削除する |
| 変数名.clear() | すべての値を削除する | |
| 変数名.has(key) | key:存在を確認したい値のkey | 指定した値の存在を確認する |
変数名.size :Mapの要素数を取得
const オブジェクト = Object.fromEntries(Mapオブジェクト);
キーにオブジェクトのみ使用可能なコレクション。
| メソッド | 引数 | 説明 |
|---|---|---|
| 変数名.set(key,value) | key:追加する値のkey value:追加する値 | 値を追加する |
| 変数名.get(key) | key:取得する値のkey | 値を取得する |
| 変数名.delete(key) | key:削除する値のkey | 値を削除する |
| 変数名.has(key) | key:存在を確認する要素のkey | 指定したkeyが存在するか確認する |
WeakMapは反復可能オブジェクトではないためfor...of文などを使った反復処理はできない
反復処理の挙動を定義するときに使うオブジェクト
※イテレーターでは関数を定義して、それを呼び出すことによって、returnで(関数のように)nextを受け取っている。関数の戻値を格納した変数では、その関数を実行した状態を格納しているようだ。変数の要素としてnextを呼び出すことで反復処理を実行することができる。関数内、next内ではコードを記述しても問題ないようであり、return文には直接はコードを記述できないようである。
反復可能オブジェクト:イテレータを保持しているオブジェクトのこと
反復可能オブジェクトを作成するには、イテレータを返す関数をオブジェクトのSymbol.iterator プロパティに設定するという決まりがある。オブジェクトにイテレータを追加した場合、for...of文のループに使用できる。ループごとに取り出される値はプロパティではなくイテレータが返す値となる。
ジェネレータ(ジェネレータ関数)とは、イテレータと同様の機能を持つGeneratorオブジェクトを作成するための関数。ジェネレータを使うとイテレータと同様の処理を完結に記述できる。
スプレッド演算子はオブジェクトや配列の要素を展開したり、まとめたりするための演算子。オペランドの前にドットを3つつける形式で記述する。
配列の定義時に要素として利用すると、複製を行うこともできる。通常代入する場合は参照複製であるが、スプレッド演算子を利用することで、新たな配列として定義できる。
関数実行時にはオブジェクトをスプレッド演算子で渡すことができない。Array.prototypeにSymbol.iteratorとして関数を定義することで利用可能となる。
スレッドはプログラムの開始から終了までの一連の処理の流れのこと。処理の開始から終了まで一貫していることを「1つのスレッドでコードが実行されている」と表現する。JavaScriptは基本的にシングルスレッドで実行される。(Web Workerスレッドと呼ばれる特殊な実装を行うことで利用できる並列実行もある)
非同期処理の管理、実行を行うための仕組み
コードの実行前にJavaScriptエンジンによってグローバルコンテキストがコールスタックに積まれる。この時点ではタスクキューは空で、Web APIも呼び出されていない状態。続いてグローバルコンテキストからWeb APIを実行することで、コールバック関数がタスクキューに実行待ちの状態で登録される。タスクキューに登録された関数はコールスタックが空になるまで実行されない。コールスタックが空になると、イベントループが検知して、コールバック関数をタスクキューから取得し関数コンテキストが生成される。その他にタスクキューにタスクが存在する場合にはイベントループによって同様に処理される。
タスクキューでタスクをカテゴリに分類して、ソースに応じた制御を行うためのもの
非同期処理を行うためのオブジェクト。非同期処理のネストを避けることができる。
| 関数 | 意味 |
|---|---|
| then() | 同期処理が成功したときに実行する |
| catch() | 同期処理が失敗したときに実行する |
| finally() | 非同期処理が完了した際に必ず実行する |
メソッドをつなげて記述する方法。
改行を含むことも可能
複数のPromiseを、順番に処理が完了するのを待って、次の非同期処理を実行していくこと。(直列な処理)
Promiseインスタンスは内部で現在の状態を管理し、これによってPromiseのメソッドを制御している。Promiseの状態はそのインスタンスをコンソールで出力することで確認できる。
| ステータス | 説明 | |
|---|---|---|
| pending | resolve,rejectが呼び出される前の状態 | |
| settled | fulfilled | resolveが呼び出された状態 |
| rejected | rejectが呼び出された状態 | |
並列処理は静的メソッドを利用して行うことができる。
すべての非同期処理を並列に実行し、すべての完了を待ってから次の処理を行う。(すべてのPromiseインスタンスがfulfilledになってからthenメソッドに処理が移る。)また、いずれかのPromiseインスタンスのステータスがrejectedになったときにはcatchメソッドに処理が移る。
複数のPromiseインスタンスのいずれかがsettledになった時にthenメソッド(fulfilled)又はcatchメソッド(rejected)を実行する。
複数のPromiseインスタンスのいずれかがfulfilledになったタイミングでthenメソッドに処理を移す。すべてのインスタンスの状態がrejectedになった時はcatchメソッドを実行する。この時渡される引数は、AggregateErrorというオブジェクトになる。
すべてのPromiseインスタンスの状態がsettledになった時にthenメソッドに移行する。allと異なりallSettledの場合はcatchメソッドは使わない。rejectとなった場合はthenメソッドのコールバック関数に、Promiseインスタンスのstatus,value or reasonが対で格納された配列が入る。
fulfilledの状態のPromiseインスタンスを返す。
rejectedの状態のPromiseインスタンスを返す。
Promiseの非同期処理の実行は、ジョブキュー(Job Queue)によって管理されている。
ジョブキューはPromiseによる処理の管理をする専用のキュー。
Promiseによる非同期処理はマイクロタスク(Microtask)と呼ぶ。
setTimeoutやTimerはマクロタスク(Macrotask)と呼ぶ
実行順序はジョブキュー→タスクキュー
Promiseのthenの処理を簡潔に記述することができる。returnが返す値は必ずPromiseインスタンスになる。
Promiseのステータスがsettledになるまで、後続のコードの実行を待機する。
サーバーからデータやファイルを取得するときに使う。Web APIの一種であるFetch API(Fetch関数)。非同期処理なのでPromiseやawait/asyncを使って記述する。
| プロパティ | 説明 |
|---|---|
| method | POST | GET | PUT | DELETEなどのリクエストメソッドを文字列で設定する。初期値はGET |
| headers | リクエストヘッダーを変更する時に設定する(オブジェクト形式) |
| body | リクエストのbody部を挿入したい値で設定する |
| プロパティ | 説明 |
|---|---|
| Response.ok | 200~299のHTTPステータスがサーバーから返された場合には、リクエスト成功としてtrueが格納されている。それ以外は、リクエスト失敗としてfalseが返る。 |
| Response.status | HTTPステータスが格納されている |
| Response.headers | レスポンスのヘッダー情報がオブジェクトで格納されている |
| メソッド | 説明 |
| Response.json() | レスポンスで帰ってきたJSON文字列を処理する時に使う。レスポンスをオブジェクトに変換した値をPromiseでラップしたものを取得する。 |
| Response.blob() | バイナリデータ(0と1の羅列)を含むレスポンスを処理する時に使う。動画などがこれにあたる。BlobオブジェクトをPromiseでラップしたものを取得する。 |
| Response.text() | レスポンスの文字列を取得するときに使う。文字列を扱うUSVStringオブジェクトをPromiseでラップしたものを取得する |
DOM(Document Object Model)、DOMインターフェイス、DOM APIともいう。JavaScriptからHTMLへの入出力を行うことができる。
W3CがDOMやHTMLを管理してきたが、2004年にWHATWGが方向性の違いからできた。(おそらくは同一の団体)
それ以降は両者が重複する形でDOMとHTMLの仕様が管理されていた。
2019年からはWHATWGの使用に一本化することで合意されている。
HTML/DOMの仕様:WHATWG-Standards
| Node | 説明 | 例 |
|---|---|---|
| ELEMENT_NODE | HTMLタグ(HTML要素)の情報を保持するノード | <p>,<img>等 |
| TEXT_NODE | タグ内のテキストなどの文字情報を保持するノード | <p>文字列をテキストノードと言う。</p> |
| COMENT_NODE | コメントを保持するノード | <!-- コメント--> |
ElementとNodeのツリーは、それぞれDocumentオブジェクトのchildren、childNodesに格納されている。
| メソッド、プロパティ | 戻り値のタイプ | 説明 |
|---|---|---|
| console.dir(DOMツリーのエイリアス) | void | オブジェクト形式でコンソールにdocumentオブジェクトの中身を表示するメソッド |
| parentElement | Element | 親のElementを返す。 |
| parentNode | Node | 親のNodeを返す。 |
| children | HTMLCollection | 子のElementを含む配列風オブジェクトを返す |
| ChildNodes | NodeList | 子のNodeを含む配列風オブジェクトで返す。 |
| firstElementChild | Element | childrenで取得される配列封オブジェクトの最初の要素を返す |
| firstChild | Node | childNodesで取得される配列封オブジェクトの最初の最初の要素を返す |
| lastElementChild | Element | childrenで取得される配列風オブジェクトの最後の要素を返す |
| lastChild | Node | childNodesで取得される配列風オブジェクトの最後の要素を返す |
| previousElementSibling | Element | 自要素と兄弟関係にある1つ前のElementを返す |
| previousSibling | Node | 自要素と兄弟関係にある1つ前のNodeを返す |
| nextElementSibling | Element | 自要素と兄弟関係にある1つ後のElementを返す |
| nextSibling | Node | 自要素と兄弟関係にある1つ後のNodeを返す |
| DOMツリー外から取得可能なDOMオブジェクト | ||
| document.body | Element | HTML内の<body>のElementを返す |
| document.head | Element | HTML内の<head>のElementを返す |
| document.images | HTMLCollection | HTML内の<img>のElementを含む配列風オブジェクトを返す |
| document.forms | HTMLCollection | HTML内のすべての<form>のElementを含む配列風オブジェクトを返す |
| document.embeds | HTMLCollection | HTML内のすべての<embed>のElementを含む配列風オブジェクトを返す |
| 特定のElementを取得するDOMインターフェイス | ||
| getElementById("idAttr") | Element|null | idの属性値(idAttr)と一致した最初のElementを取得する。一致する要素がない場合は、nullが返る。 |
| getElementsByClassName("clsAttr") | HTMLCollection | class属性(nameAttr)を使ってElementが格納された配列風オブジェクトを取得する。一致する要素がない場合は、空のHTMLCollectionが返る。 |
| getElementsByName("nameAttr") | NodeList | name属性(nameAttr)を使ってElementが格納された配列風オブジェクトを取得する。一致する要素がない場合は、空のHTMLCollectionが返る。 |
| getElementsByTagName("tagName") | HTMLCollection | タグ(tagName)を使ってElementが格納された配列風オブジェクトを取得する。一致する要素がない場合は、空のHTMLColectionが返る。 |
| セレクタAPIによるElementの取得 | ||
| querySelector(selector) | Element | セレクタ文字列(selector)に一致した最初のElementを取得する |
| querySelectorAll(selector) | NodeList | セレクタ文字列(selector)に一致したすべてのElementを取得する |
| 祖先要素にさかのぼって検索する(セレクタAPI?) | ||
| element.closest(selector) | Element | 先祖要素を順にさかのぼってセレクタ文字列(selector)に一致するElementを返す。(elementは取得したElementオブジェクト) |
| 要素内のコンテンツの取得・変更 | ||
| innerHTML | 要素内のHTMLを文字列として取得、変更する。変更時にはHTMLタグは解析されて、記述通りに表示される。(Elementオブジェクトから使用可能) | |
| textContent | HTMLタグは無視された文字列として取得、変更する。(Elementオブジェクトから使用可能) | |
| innerText | textContentと異なり画面上に表示されるテキストのみを所有する。(Elementオブジェクトから使用可能)(非推奨) | |
| outerText | textContentと異なり画面上に表示されるテキストのみを所有する。(Elementオブジェクトから使用可能)(非推奨) | |
| value | input属性の値を取得する | |
| content | templateタグがfirstElementChildで子要素を取得できないため、contentで子要素を取得する。 | |
| 要素を作成・削除する | ||
| document.createElement("要素名") | element | 要素名を指定して新しいElementを作成する |
| element.append(node1,node2...) | element内の最後の子要素としてNodeを挿入する。Node以外に文字列も挿入可能 | |
| element.prepend(node1,node2...) | element内の最初の子要素としてNodeを挿入する。Node以外に文字列も挿入可能 | |
| element.before(node1,node2...) | elementの直前の要素としてNodeを挿入する。Node以外に文字列も挿入可能 | |
| element.after(node1,node2...) | elementの直後の要素としてNodeを挿入する。Node以外に文字列も挿入可能 | |
| element.insertAdjacentElement(position,elementIn) | 要素からの相対的な位置を(position:beforebegin[element直前],afterbegin[element開始タグ直後],beforeend[element終了タグ直前],afterend[element直後])で指定してelementInを挿入。 | |
| element.insertAdjacentHTML(position,htmlStr) | 要素からの相対的な位置をpositionで指定してhtmlStrを挿入する。htmlStrはHTMLに解釈されて画面上に表示される。 | |
| element.insertAdjacentText(position,str) | 要素からの相対的な位置をpositionで指定してstrを挿入する。HTMLタグはただのテキスとして解釈される。 | |
| element.remove() | 自要素を削除する。 | |
| element.cloneNode(flag) | element | elementを複製する。flagをtrueにすることで、子孫要素を含めることができる。 |
| 要素の属性の取得変更 | ||
| getAttribute("name") | 属性の値を取得する。 | |
| getAttributeNames() | 属性名の一覧を取得する。 | |
| setAttribute("name",value) | 属性と値を設定する。 | |
| removeAttribute("name") | 属性を削除する。 | |
| toggleAttribute("name") | 属性の付け外しを行う。 | |
| hasAttributes() | boolean | 属性を持っているか確認する。保持している場合にtrue、保持していない場合にfalse |
| hasAttribute("name") | boolean | 特定の属性を持っているか確認する。保持している場合はtrue、保持していない場合はfalse。 |
| 位置情報を保持するElementオブジェクトのプロパティ | ||
| clientLeft clientTop | 自要素のborderの幅をpx値で返す。(読み取り専用) | |
| offsetLeft offsetTop | 親要素の内からborder外までの幅をpx値で返す。(読み取り専用) | |
| scrollLeft scrollTop | コンテンツの端からパディングの端までのスクロール可能領域までのpx値。※詳細不明 | |
| 大きさ情報を保持するElementオブジェクトのプロパティ | ||
| clientWidth clientHeigth | スクロールバーを含まない、要素のパッディングまでの横幅、縦幅をpx値で取得する。(読み取り専用) | |
| offsetWidth offsetHeigth | 要素のボーダーまでを含む横幅、縦幅をpx値で取得する。(読み取り専用) | |
| scrollWidth scrollHeigth | 画面表示されていないスクロール可能なコンテンツ領域の横幅、縦幅をpx値で取得する。値を変更した場合は、変更したpx分スクロールされる。(読み取り専用)※詳細不明 | |
| 位置や大きさを確認するためのメソッド | ||
| element.getBoundingClientRect() | Object:DOMRect | 要素の位置と大きさを格納したオブジェクトを返す。ビューポートとborderの境界距離で計算される。 [Object{left,top,right,bottom,x,y,width,height} |
| style属性の変更 | ||
| element.style.CSSプロパティ名 | elementのstyle属性の指定したプロパティを取得、変更する。 | |
| classListプロパティ(class属性の値を変更するメソッド) | ||
| element.classList.add("className") | class属性にクラスを追加する。 | |
| element.classList.remove("className") | class属性からクラスを削除する。 | |
| element.classList.toggle("className") | クラスが設定されている場合はclass属性の値を外し、値が設定されていない場合はclass属性の値を追加する。 | |
| element.classList.contains("className") | boolean | class属性内に名前が存在するかを確認する。存在する場合にtrue |
| window.location.assign("url",) | ||
| セレクタ文字列 | 説明 |
|---|---|
| * | すべてのタグ |
| E | タグ名 |
| #idAttr | idの属性値 |
| .clsAttr | classの属性値 |
| [attr] | 属性名(タグに負荷するもの) |
| [attr="value"] | 属性名(attr)と属性値(value) |
| [attr^="value"] | 属性名(attr)と属性値(value)の先頭一致 |
| [attr$="value"] | 属性名(attr)と属性値(value)の後方一致 |
| [attr*="value"] | 属性名(attr)と属性値(value)の部分一致 |
| S1,S2 | セレクタ(S1)とセレクタ(S2)に一致する(OR条件) |
| S1 S2 | セレクタ(S1)とセレクタ(S2)両方に一致する(AND条件) |
| S1>S2 | セレクタ(S1)の子要素にあたるセレクタ(S2) |
| S1 + S2 | セレクタ(S1)の直後にあるセレクタ(S2) |
| S1 ~ S2 | セレクタ(S1)の兄弟関係でS1よりも後にあるセレクタ(S2) |
データ属性はユーザーが独自で値を保持するためのHTML属性。データ属性は、data-*のような形式で表される。この属性は一時的にJavaScriptで使用する値を保持している。JavaScriptからアクセスするときは、「dataset」という特別なプロパティを通してアクセスする。属性値は文字列として取得される。
getBoundingClientRectメソッドで取得できる要素の大きさとoffsetWidthなどを指定して取得する値は基本的には同じだが、レイアウト幅はCSSで指定された幅であり、レンダリング幅は実際に画面上に表示される時の幅で、transformプロパティを指定した場合にはoffset系のプロパティはレイアウト幅を取得し、getBoundingClientRectメソッドはレンダリング幅を取得する。
イベントの伝播とはページ内のどこかでイベントが発生した場合にイベントが要素間を伝播していくこと。
発生したイベントと同じタイプのイベントが上位から下位に伝播していく。この範囲は先祖要素にあたる物のみに限られ、イベントの発生した要素迄となる。イベントリスナでcapture:trueとしたアクションのみがこのフェーズで実行される。
キャプチャリングフェーズのイベントの伝播がイベントが発生した要素までたどり着くとこのフェーズへ移行する。イベントが発生した要素に登録されているアクションを実行する。
ターゲットフェーズが完了したらこのフェーズへ移行する。イベントが上位の親要素、先祖要素に対してイベントの伝播が起こる。イベントリスナにcapture:trueが設定されているイベントリスナにはこのフェーズではアクションは起こらない。
Eventオブジェクトには、イベントの発生状況にかかわる情報が格納されている。
| Eventオブジェクトのメソッド | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| メソッド | 説明 | ||||||||||
| preventDefault() | ブラウザのデフォルトの処理の実行を抑止する。抑止可能なイベントタイプはcanselableがtrueのイベント | ||||||||||
| stopPropagation() | キャプチャリング、バブリングによるイベント伝播を抑止する。 | ||||||||||
| stopImmediatePropagation() | stopPropagation()の作用に加え、自要素に対して複数アクションが登録されている場合には、後続のアクションの実行を抑止する。(今実行されているアクションのみ正常に実行される。) | ||||||||||
| Eventオブジェクトのプロパティ | |||||||||||
| プロパティ | 説明 | ||||||||||
| type | イベントタイプが文字列で渡される。 | ||||||||||
| cancelable | preventDefault()を使ってデフォルト処理をキャンセルできるかどうかを返す。trueの場合キャンセル可能 | ||||||||||
| bubbles | 発声中のイベントでバブリングが発生するかどうかを返す。trueの場合バブリングが発生する。 | ||||||||||
| currentTarget | アクションを登録した要素を返す。キャプチャリングやバブリングが発生しているときも常にアクションを登録した要素を返すことに注意。 | ||||||||||
| target | 実際にイベントが発生した要素を返す。キャプチャリングやバブリングの作用によって、実際にイベントが発生した要素とアクションが登録されている要素が異なる可能性に注意。 | ||||||||||
| defaultPrevented | preventDefault()によって、ブラウザのデフォルト処理がキャンセルさえたかどうかを表す。trueの場合、キャンセルされた状態を表す。 | ||||||||||
| eventPhase | 実行中のイベントフェーズを表す。
| ||||||||||
| timestamp | ドキュメントの生成からイベントの発生までの時間を返す | ||||||||||
| isTrusted | イベントがユーザー操作によって発生したものか、スクリプトによって発生したものかを判定する。ユーザー操作によって発生した場合、true | ||||||||||
| イベントタイプ | 発火タイミング |
|---|---|
| input | <input>要素のvalue属性の値や<textarea>のコンテンツが変化する度に発火する。 |
| change | <input>要素のvalue属性の値や<textarea>のコンテンツ値が確定したタイミングで発火する。値の変更後、フォーカスが外れるタイミングとなる。 |
| keydown | 任意のキーが押し込まれたときに発火する。 |
| keypress | 非推奨。代わりにkeydownを利用する。 |
| keyup | 任意のキーを離すタイミングで発火する。 |
| compositionstart | IMEによる編集セッションが開始したタイミングで発火する。 |
| compositionend | IMEによる編集セッションが終了したタイミングで発火する。漢字などの変換が確定したときに、または編集をキャンセルしたタイミングで発火する。 |
| compositionupdate | IMEによる編集セッション中で文字が追加されたときに発火する。 |
| submit | フォームが送信されたときに発火する。 |
| イベントタイプ | 発火タイミング |
|---|---|
| click | マウスの左クリックが押されたときに発火する。 |
| dblclick | マウスの左クリックが2回連続で押されたときに発火する。 |
| contextmenu | コンテキストメニューを開く時に発火する。すなわち、マウスの右クリック、またはメニューキーが押されたときに発火する。 |
| mousedown | マウスでクリックされたときに発火する。左クリック、右クリックどちらでも発火する。 |
| mouseup | マウスのクリックが話される時に発火する。左クリック、右クリックどちらでも発火する。 |
| mouseenter | カーソルが要素内に入るタイミングで発火する。(バブリングは発生しない) |
| mouseover | カーソルが要素、又はその子要素を通過するときに発火する。(バブリングが発生する。) |
| mousemove | カーソルが要素内で移動している間に連続的に発火する。 |
| mouseleave | カーソルが要素から出たときに発火する。(バブリングは発生しない) |
| mouseout | カーソルが要素から出たときに発火する。(バブリングが発生する) |
| イベントタイプ | 発火タイミング |
|---|---|
| copy | コピー操作を行ったときに発火する |
| paste | ペースト操作を行ったときに発火する |
| cut | カット操作を行ったときに発火する |
| イベントタイプ | 発火タイミング |
|---|---|
| focusin | 要素にフォーカスが当たった時に発火する。(バブリングが発生する) |
| focus | 要素にフォーカスが当たった時二発火する。(バブリングは発生しない) |
| focusout | 要素からフォーカスが外れたときに発火する。(バブリングが発生する) |
| blur | 要素からフォーカスが外れたときに発火する。(バブリングは発生しない) |
| イベントタイプ | 発火タイミング |
|---|---|
| scroll | 画面がスクロールしている間は連続的に発火する。 |
| wheel | マウスのホイールが回転している間は連続的に発火する。 |
| mousewheel | 代わりにwheelイベントを使用する |
| touchstart | スマホのタッチ入力が開始されたタイミングで発火する |
| touchmove | スマホのタッチ入力が開始されたタイミングで発火する |
| touchend | スマホのタッチ入力が終了したタイミングで発火する |
| イベントタイプ | 発火タイミング |
|---|---|
| transitionstart | CSSのtransitionプロパティによるアニメーション開始時に発火する。トランジションの遅延(transition-delay)を待ってから発火する |
| transitionrun | CSSのtransitionプロパティによるアニメーション開始時に発火する。トランジションの遅延(transition-delay)を待たずに発火する |
| transitionend | CSSのtransitionプロパティによるアニメーション終了時に発火する。 |
| animationstart | CSSのanimationプロパティによるアニメーション開始時に発火する。アニメーションの遅延(animation-delay)を待ってから発火する。 |
| animationend | CSSのanimationプロパティによるアニメーション終了時に発火する。すなわち、animation-iteration-countで指定した回数分アニメーションが実行された後に発火する |
| animationiteration | CSSのanimationプロパティによるアニメーションが1回ループしたタイミングで発火する。すなわち、animation-iteration-countに設定された回数だけ発火する |
| イベントタイプ | 発火タイミング | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| load | CSS(.css)/JS(.js)ファイル、画像などのHTMLから読み込んでいるすべてのリソースが読み込み完了した時点で発火する。 | ||||||||
| DOMContentLoaded | DOMツリーの構築が完了した時点で発火する。DOM操作が行える状態になったことを表す最初のイベント。CSS(.css)/JS(.js)ファイル、画像などの読み込みは完了していない可能性がある。Documentオブジェクトに対するイベントリスナとしても登録可能。 | ||||||||
| readystatechange | Documentオブジェクトに登録可能なイベントタイプ。画面の読み込みフェーズが変わったタイミングで発火する。readyStateプロパティによって、現在どのフェーズかを判断できる。
| ||||||||
| beforeunload | 現在表示中のページがアンロードされる直前に発火する | ||||||||
| unload | 現在表示中のページがアンロードされるときに発火する | ||||||||
| resize | 画面サイズが変更されたときに発火する | ||||||||
| online | ブラウザがネットワーク接続を検知したタイミングで発火する | ||||||||
| offline | ブラウザがネットワーク接続の切断を検知したタイミングで発火する。 |
意味のある機能のまとまりとして記述されたもの
モジュールをインターフェイス経由でのみ使用できるようにすることで、モジュール同士の結びつきを弱めて、モジュールの追加や交換を容易にすることができる。機能同士が希薄な関係であることを疎結合と言う。疎結合に保った機能を提供することでコードの可読性、保守性、再利用性を向上させることができる。
コードを読み込んだ時点で、インポート先のモジュールはすでに決定される。JavaScriptでインポートと言う場合にはこちらの方法を指す。静的インポートではインポート先のモジュールのトップレベルのコードの実行までを行う。なお、トップレベルのコードの実行は一度のみで再度インポートされた場合には省略される。
コードを実行する段階で初めて、どのモジュールを読み込むかが決定される。必要な時に他のモジュールを読み込むことができる。
Strictモードは「"use strict;"」と記述すると有効になる。また、type="module"属性を記述したscriptタグではデフォルトで有効。さらにclass内のコンストラクタやメソッドでも有効
Node.jsはブラウザからJavaScriptを実行する機能を抽出したもの。Web APIの大部分は利用できない。(DOMインターフェイスも存在しない)
LTS版:Node.jsのダウンロードURL
パッケージ管理ソフトにはyarnというものもある。(Facebookが中心となって開発している)
プログラムをパッケージ単位で追加・削除できる。Node.jsに含まれている。package.jsonというファイルを使ってパッケージの状態を保持している。package.jsonにはプロジェクトにかかわる情報を記述できる。
| name | パッケージ名(リポジトリ名やフォルダ名などをつける) |
|---|---|
| author | 作者名 |
| version | バージョン名(1.20.1のような3つの数値で表す) |
| description | パッケージの説明 |
| repository | リポジトリの情報 |
| private | trueの場合は、公開のコマンドを流しても公開されない |
| main | 外部からパッケージを使うときのエントリーポイントを記述する。パッケージが読み込まれたときにはエントリーポイントに指定したファイルが実行され、エクスポートされた関数やクラスが使用可能な状態になる |
| type | ES Modules(module)又はCommonJS(commonjs)を指定する。省略された場合は、CommonJSの規格に沿ってコードが実行される。 |
|---|---|
| scripts | パッケージで使うスクリプトを登録する。ここに登録したスクリプトは「npm run <スクリプト> 」で実行可能となる。また、「start,stop,restart,test」で登録されたスクリプトに関しては、runを省略してnpm startのように実行できる。 |
| dependencies | コードの実行に必要なパッケージを記述する。通常はnpm installコマンドを実行することで自動的に記述されるため手動で変更することはない。 |
| devDependencies | 開発時に必要なパッケージを記述する。例えば、本番用コードを生成する時に使うパッケージやテストスクリプトを実行するときに使うパッケージなど。npm installコマンドを実行することで自動的に入力されるため、手動で変更することはない。 |
| optionalDependencies | 任意で使用可能なパッケージを記述する。ここに追加されたパッケージが何らかの理由で動作しない場合にも、それ以外の機能は問題なく動作するように作成する |
| engines | 実行時に昇給されるNode.jsとnpmのバージョンを記述する |
| browserslist | ブラウザやNode.jsのサポートをどこまで行うか記述する。パッケージの本番用コードをビルドする時に主に使用される。代表的なモジュールバンドラであるwebpackはコードをビルドする時にbrowserslistフィールドにサポート対象のブラウザの設定があれば、その ブラウザで動作するうように広報互換のコードを自動的に注入する。CSSのコードに広報五感を持たせるAutoprefixerなどもこの設定を参照する。 |
| コマンド | 説明 |
|---|---|
| node -e "コード" | コマンドラインでコードを実行 |
| node ./filepath/file.js --input-type=module | javascriptをES Moduleで実行する。 |
| node run <スクリプト> | package.jsonで指定したスクリプトを実行することができる。(jsonオブジェクトscriptsのstart,stop,restart,testを<スクリプト>に指定して実行する。 |
| npm init -y | packageの初期化を対話型で行う。-yでデフォルト設定。 |
| npm install --production | package.jsonが配置されているディレクトリで実行することで、package.jsonのdependencies、devDependencies、optionalDependenciedリストに記述しているパッケージをすべてインストールする。インストールされたパッケージは同階層に作成されるnode_modulesフォルダに格納される。 |
| npm install --production | オプション--productionはdependenciedリスト、optionalDependenciesリストのパッケージのみインストールする。環境変数にNODE_ENVを設定し、その値としてproductionが設定されている場合も同様 |
| npm install <パッケージ名>[@<バージョン>] | |
| npm install <Gitホスト>:<Gitユーザー>/<リポジトリ名> | |
| npm install <GitリポジトリURL> | |
| npm install <.tar, .tar.gz, or .tgz形式の圧縮ファイルへのパス,またはURL> | |
| npm install <ローカルフォルダへのパス> | |
| 用語 | 説明 | 備考 |
|---|---|---|
| JavaScriptエンジン | JavaScriptを解析して実行する処理機能(Chrom:V8、Safari:JavaScriptCore、Firefox:SpiderMonkey、Edge:V8) | |
| Node.js | JavaScriptが動作する環境、ブラウザなしでスクリプトを実行できる。 | |
| CommonJS | Node.jsのみで利用可能。 | モジュール |
| ES Modules | scriptタグに対してtype="module"を設定することで利用可能。 | |
| strictモード | ファイルの先頭に"use strick;"を記入することで利用可能。 | |
| HTMLパーサー | ||
| コード記述 | JavaScriptは大文字と小文字を厳密に使い分ける必要がある。 | |
| 空白文字 | 無視して実行。 | |
| ; | 改行を挟んだ場合には不要 | |
| マジックナンバー | コード中にじかに記述された用途のわからない数字のこと。 | |
| 仮引数 | 関数宣言時に設定する引数のこと。 | |
| 実引数 | 関数実行時に渡す引数のこと。 | |
| プロパティ記述子 | ||
| _変数名 | クラス内のみの利用を表す。 | |
| Web Storage API | ブラウザにデータを保存することができる機能を提供する。localStorageオブジェクト(ローカルストレージ)またはsessionStorageオブジェクト(セッションストレージ)から使うことができる。 | |
| オリジン | URLのスキーム、ドメイン、ポートのこと。ローカルストレージは接続先のサーバーのオリジン単位で値が保存される。同じオリジン内のデータであれば、ブラウザのタブやウィンドウを跨いでデータの取得が可能。「スキーム://ドメイン:ポート」なので「http://localhost:80/index.html」と「http://localhost:80/dir/item.html」は同一オリジン。またローカルストレージには保存期限がないため、開発ツールやclear()、removeItem()で消去しない限りデータが失われることはない。 | |
| セッション | Webシステムにおけるセッションはブラウザがサーバーとの接続をしてから切断するまでの一連の操作や通信のこと。 | |
| シャローコピー | 参照アドレスのコピーであること。この場合はオブジェクトのアドレスをコピーする。 | |
| ディープコピー | オブジェクト自体のコピーであること。この場合は同一のオブジェクトを別の配列に代入する。多階層配列においては下位配列のアドレスのみを格納しているようだ。 | |
| 反復可能オブジェクト | イテレーターを保持しているオブジェクトのことで、イテレータは主にオブジェクトの反復処理の挙動を定義するためにつかわれる。 | |
| DOM(Document Object Model) | ||
| DOMオブジェクト | DOMインターフェースというプロパティやメソッドを扱うもの。これによってHTMLタグとの変換がブラウザ上で行われている。 | |
| セレクタ文字列 | JavaScriptやCSSのコード内でHTML要素を特定する時に使う文字列のこと。 | |
| レイアウト幅 | CSSで指定された幅 | |
| レンダリング幅 | 実際に描画された幅 | |
| アクション | イベントが発生したときに実行される関数 | |
| イベントハンドラ | windowオブジェクト、elementオブジェクト、documentオブジェクトのonから始まるプロパティ。ここに関数を登録することでリアクションを定義できる。 | |
| イベントリスナ | イベントにアクションを紐づける仕組みのこと。オプションの指定が可能で、複数のアクションを登録できる。アクションごとに登録解除が可能。以上の点でイベントハンドラと異なる。 | |
関数を引数として受け取ることができる。関数の()は実行を表す。
トップへ戻る| コード | 引数 | 説明 |
|---|---|---|
| コメント表記 | ||
| //文章 | 一行コメント | |
| /* 文章 *// | 区間コメント | |
| 変数 | ||
| var 変数名 = 値; | 変数を定義する(グローバルスコープ) | |
| let 変数名 = 値; | 変数を定義する | |
| const 変数名 = 値; | 定数を定義する | |
| ${変数名} | テンプレートリテラル。文字列中に任意の変数の値を表示する。 | |
| let オブジェクト名 = {プロパティ1: 値1,プロパティ2: 値2,プロパティ3: 値3,ネストプロパティ名:{プロパティ1: 値1,プロパティ2: 値2},}; | オブジェクトの初期化 | |
| オブジェクト名.プロパティ名 | ドット記法 | |
| オブジェクト名["プロパティ名"] | ブラケット記法。プロパティ名には変数による指定も可能。 | |
| delete オブジェクト名.プロパティ名; | プロパティを削除、変数は削除できない。 | |
| let オブジェクト名 = {プロパティ: function(引数){関数処理文} }; | プロパティに関数を定義 | |
| オブジェクト.プロパティ = function(引数){関数の処理} | プロパティにメソッドを追加。 | |
| オブジェクト.プロパティ(引数); | メソッドの実行。 | |
| let 変数名 = Symbol("ラベル"); | シンボル型の定義。JavaScriptエンジンが新しい機能を追加するときに既存の機能を壊さないためのデータ型。列挙対象にならない。 | |
| let 変数名 = [値1,値2,値3,値4,...]; | 配列の宣言 | |
| 関数 | ||
| window.alert(string st) | string:表示文字列 | stの内容をアラート表示(ダイアログ) |
| window.close() | 現在のウィンドウを閉じる | |
| window.open(string link,"window","width=x,height=y") | ||
| console.log(string st) | string:表示文字列 | stの内容をコンソールに表示 |
| document.write(string st) | string:表示文字列 | stの内容を画面上に表示 |
| Number(値) | 数値へ変換する値 | 数値へ変換。(数値以外の場合NaN:Not a Numberを返す。 |
| Boolean(値) | 真偽値へ変換する値 | 真偽値へ変換。 |
| String(値) | 文字列へ変換する値 | 文字列へ変換。 |
| BigInt(値) | BigInt型へ変換する値 | BigIntへ変換。 |
| Math.random() | ランダムな数を生成する。 | |
| Reflect.getOwnPropertyDescriptor(オブジェクト名,"プロパティ名"); | プロパティ記述子の確認 | |
| Object.getOwnPropertyDescriptor(オブジェクト名,"プロパティ名"); | プロパティ記述子の確認 | |
| Reflect.defineProperty(オブジェクト,"プロパティ名",{プロパティ記述子:値,プロパティ記述子:値,...}); | プロパティ記述子の設定方法 | |
| Object.defineProperty(オブジェクト,"プロパティ名",{プロパティ記述子:値,プロパティ記述子:値,...}); | プロパティ記述子の設定方法 | |
| Object.values(オブジェクト) | オブジェクトの値を取得 | |
| Object.keys(オブジェクト) | オブジェクトのキーを取得 | |
| eval(文字列) | 文字列をコードとして実行。 | |
| setTimeout(関数,時間ms,関数の引数) | ||
| 関数名.bind(object,param1,param2...) | thisで参照するオブジェクトを指定する。関数の引数を指定する。書かれた時点では関数は実行されない。 | |
| 関数名.call(object,param1,param2...) | bindと同様であるが書かれた時点で実行される。 | |
| 関数名.apply(object,array) | callと同様であるが、引数を配列で指定する。 | |
| オブジェクト.hasOwnProperty("プロパティ名"); | プロパティの有無を確認。メソッドは該当しない。自身のオブジェクトのプロパティとして存在するかを確認。 | |
| "プロパティ名" in オブジェクト; | オブジェクトがプロパティを有しているかどうかの値。メソッドも該当する。プロトタイプチェーンまで確認する。 | |
| オブジェクト名 instanceof クラス名 | オブジェクトがクラス名で指定したクラスに属するか。 | |
| Object.create(protoObj); | protoObjを__proto__に設定したオブジェクトを生成。 | |
| 文字列.split(char separate); | 文字列を分解 | |
| 文字列.length; | 文字数を取得 | |
| 配列.slice(int startIndex,int endIndex) | 配列から指定範囲を配列として切り取る。 | |
| データ型 | 値 | 説明 |
|---|---|---|
| String | 文字列 | |
| Number | 数値 | |
| BigInt | 巨大な整数 | |
| Boolean | 真偽値 | |
| undefined | 未定義 | |
| Symbol | シンボル | |
| Object | オブジェクト |
| 記号 | 演算の種類 | 例 |
|---|---|---|
| + | 加算 | 6+9 |
| - | 減算 | 20-15 |
| * | 乗算 | 3*7 |
| / | 除算 | 10/5 |
| % | 剰余 | 7%3 |
| ** | べき乗 | 3**2 |
| ++ | インクリメント | a++,++b |
| -- | デクリメント | a--,--b |
| 演算子 | 用途 |
|---|---|
| == | 値が等しいことを確認 |
| === | 値と型が等しいことを確認 |
| != | 値が等しくないことを確認 |
| !== | 値と型が等しくないことを確認 |
| 演算子 | 用途 |
|---|---|
| A<B | AがBより小さい事を確認 |
| A>B | AがBより大きいことを確認 |
| A<=B | AがB以下であることを確認 |
| A>=B | AがB以上であることを確認 |
| AinB | AのプロパティがBのオブジェクトのプロパティとして含まれるかの確認 |
| 演算子 | 用途 |
|---|---|
| = | 代入 |
| += | 加算の自己代入 |
| -= | 減算の自己代入 |
| *= | 乗算の自己代入 |
| /= | 除算の自己代入 |
| **= | べき乗の自己代入 |
| &&= | 論理積の自己代入 |
| ||= | 論理和の自己代入 |
| ??= | Null合体の自己代入 |
| 演算子 | 用途 |
|---|---|
| && | 論理積 |
| || | 論理和 |
| 演算子 | 用途 |
|---|---|
| , | それぞれの演算子を左から評価し、最後のオペラントの値を返す |
| 単項演算子 | |
| delete | オブジェクトから特定のプロパティを削除 |
| typeof | データ型の確認 |
| ! | 真偽値に変換して、反対の真偽値を取得 |
| + | Number型への変換 |
| - | Number型へ変換して、正負を入れ替え |
| 条件式?{条件式がtruthyの時実行}:{条件式がfalsyの時実行} | 三項演算子 |
| let 変数名1 = 変数名2 ?? "初期値"; | Null合体演算子。左のオペラントがnullまたはundefinedの場合には、右のオペラントを返す。 |
| 変数名?.プロパティ名 | オプショナルチェイニング演算子。オブジェクト以外の値に関してプロパティを取得したい場合に利用 |
| "Enter" | 0x0D(13) |
| "Space" | 0x20(32) |
| "Tab" | 0x09(9) |
| "ArrowDown" | 0x28(40) |
| "ArrowLeft" | 0x25(37) |
| "ArrowRight" | 0x27(39) |
| "ArrowUp" | 0x26(38) |
| "Digit1" | 0x31 (49) |
| "Digit2" | 0x32 (50) |
| "Digit3" | 0x33 (51) |
| "Digit4" | 0x34 (52) |
| "Digit5" | 0x35 (53) |
| "Digit6" | 0x36 (54) |
| "Digit7" | 0x37 (55) |
| "Digit8" | 0x38 (56) |
| "Digit9" | 0x39 (57) |
| "Digit0" | 0x30 (48) |
| "KeyA" | 0x41 (65) |
| "KeyB" | 0x42 (66) |
| "KeyC" | 0x43 (67) |
| "KeyD" | 0x44 (68) |
| "KeyE" | 0x45 (69) |
| "KeyF" | 0x46 (70) |
| "KeyG" | 0x47 (71) |
| "KeyH" | 0x48 (72) |
| "KeyI" | 0x49 (73) |
| "KeyJ" | 0x4A (74) |
| "KeyK" | 0x4B (75) |
| "KeyL" | 0x4C (76) |
| "KeyM" | 0x4D (77) |
| "KeyN" | 0x4E (78) |
| "KeyO" | 0x4F (79) |
| "KeyP" | 0x50 (80) |
| "KeyQ" | 0x51 (81) |
| "KeyR" | 0x52 (82) |
| "KeyS" | 0x53 (83) |
| "KeyT" | 0x54 (84) |
| "KeyU" | 0x55 (85) |
| "KeyV" | 0x56 (86) |
| "KeyW" | 0x57 (87) |
| "KeyX" | 0x58 (88) |
| "KeyY" | 0x59 (89) |
| "KeyZ" | 0x5A (90) |