JavaScript


基本

データ型

備考
Boolean真偽値。trueまたはfalse
null
undefined
Number数値。203.1415など。
BigInt長整数。9007199254740992nなど。
String文字列。"Hello"など。
Symbol
Objectオブジェクト。

予約語

  • await
  • break
  • case
  • catch
  • class
  • const
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • enum
  • export
  • extends
  • false
  • finally
  • for
  • function
  • if
  • import
  • in
  • instanceof
  • new
  • null
  • return
  • super
  • switch
  • this
  • throw
  • true
  • try
  • typeof
  • var
  • void
  • while
  • with
  • yield

strictモードでの予約語

trueやfalseの代わりになる値

falseになる値

  • false
  • 0
  • -0
  • 0n
  • "" (空文字)
  • null
  • undefined
  • NaN

trueになる値

  • true
  • 43
  • 'Red'
  • [3, 4]

特殊文字のエスケープ

文字意味
\0ヌル文字
\bバックスペース
\f改ページ
\n改行
\r復帰
\tタブ
\v垂直タブ
\'アポストロフィ
\"ダブルクォーテーション
\\バックスラッシュ
\uXXXXUnicodeエスケープシーケンス

式と演算子

論理演算

三つ以上でもカッコは要らない。

a == 1 && b == 1 c == 1 || d == 1

文と宣言

コメントアウト

// コメント /* 複数行コメント */

変数定義

varは基本の変数、letは宣言した場所のスコープブロック内でのみ定義され、constは定数で後から中身を変更できない。

var a;といったように初期値なしで定義した場合、中身の値はundefinedになる。

var a = 1; let b = 1; const c = 1;

変数の命名規則

分割代入

let [a, b, c] = [1, 2]; // a=1, b=2, c=undefined. let vv = new Vec3(3, 4, 5); let {x, y, z: z_} = vv; // "let [x, y, z_] = [vv.x, vv.y, vv.z];" と同じ

多重代入

let a; let b; let c; a = b = c = 10;

条件分岐

if(条件) { /* --- 処理 --- */ } else { /* --- 処理 --- */ } if(条件) { /* --- 処理 --- */ } else if(条件) { /* --- 処理 --- */ } else { /* --- 処理 --- */ }

switch文

switch(変数) { case 値1: case 値2: // 値1か値2のときここが実行される break; case 値3: // 値3のときにここが実行される break; case 値4: { // カッコを使うことができる } break; default: // 値1 ~ 4のいずれでもない時にここが実行される }

繰り返し処理

for(let k=0; k<5; k++) { /* --- 処理 --- */ } // iには'a', 'b', 'c'が順に入る for(let i of ['a', 'b', 'c']) { console.log(i); } // iには'a', 'b', 'c'が順に入る for(let i in {a: 1, b: 2, c: 3}) { console.log(i); }

ループの途中から脱出

for(let i=0; i<3; i++) { for(let j=3; j>0; j--) { if(i == j) break; console.log(i, j); } // 脱出先はここ } /* (i,j) = (0,3), (0,2), (0,1), (1,3), (1,2), (2,3) */

ループを1回スキップ

for(let i=0; i<3; i++) { for(let j=3; j>0; j--) { if(i == j) continue; console.log(i, j); } } /* (i,j) = (0,3), (0,2), (0,1), (1,3), (1,2), (2,3), (2,1) */

ラベル

ラベルをつけてbreakcontinueをどの階層のforwhileに対するものか指定できる。

egLabel: for(let i=0; i<3; i++) { for(let j=3; j>0; j--) { if(i == j) break egLabel; console.log(i, j); } } // 脱出先はここ /* (i,j) = (0,3), (0,2), (0,1), (1,3), (1,2) */

応用

for文のカッコの中は毎ループ左から処理され、変数は前回のループの内容を保持する。

// # 例1 フィボナッチ数列 for(let i=j=1, c=n=0; n<0; c=j, j+=i, i=c, n++){ console.log(i) } // # 例2 RegExp.exec()の処理 (2つ目のセミコロンは必須) for(let i;(i=reg.exec(str));) { console.log(i); }

条件がfalseになるまで繰り返す

while(条件) { /* --- 処理 --- */ } do { /* --- 処理 --- */ } while(条件);

do文はあとで条件が検証されるので、通常のwhile文と違って必ず1回は実行される。

例外処理

try { /* --- 処理 --- */ } catch(e) { /* --- 処理 --- */ }

エラー

エラー概要
Error一般的なエラー
EvalErroreval関数のエラー
InternalError内部エラー
RangeError範囲エラー
ReferenceError参照エラー
SyntaxError構文エラー
TypeError型エラー
URIErrorencodeURIまたはdecodeURIのエラー

関数

下の「関数式」では「関数の巻き上げ」に対応しておらず、関数の定義より下でないとその関数が使えない。

// 関数リテラル function f(x) { /* --- 処理 --- */ return 戻り値; }; // 関数式 var g = function() { /* --- 処理 --- */ return 戻り値; };

アロー関数

// アロー関数 (x, y) => x + y; // 従来の関数 function f(x, y) { return x + y; }

任意の数の変数をもつ関数

function sum(...num) { return num.reduce((sum, k) => sum + k); }

クラス

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } }

new演算子

const square = new Rectangle(3, 4); console.log(square.width); // 4

値と型

型を取得

出力される値自体はstring型。

console.log(typeof 100); // "number"

数値

number型に対して、「0o~」で8進数、「0x~」で16進数、「0b~」で2進数。

整数部分がゼロの場合は省略できる。eまたはEで指数表現ができる。

3.1415926 -.123456789 -3.1E+12 .1e-23

メソッド

名前概要使い方
toString 基数表現の文字列へ変換 (数).toString(基数) (3).toString(2) // -> "11"
toExponential 指数表現の文字列へ変換 (数).toExponential(小数部分の桁数) (100).toExponential(2) // -> "1.00e+2"
toFixed 有効数字を指定した文字列へ変換 (数).toFixed(小数部分の桁数) (3.1415).toFixed(2) // -> "3.14"
toLocaleString カンマで桁区切りした文字列へ変換 (数).toLocaleString() (100000).toLocaleString() // -> "100,000"
parseInt 文字列を整数に変換 Number.parseInt(文字列, 基数?) Number.parseInt("123") // -> 123
parseFloat 文字列を小数に変換 Number.parseFloat(文字列, 基数?) Number.parseFloat("1.23") // -> 1.23
isNaN 値がNaNかつ数値であるかどうか Number.isNaN(値) Number.isNaN(12) // -> false

文字列

文字列のn文字目は配列のように取得できる。

console.log('0123456789'[5]) // -> '5'

メソッド

名前概要使い方
length 文字列の長さ 文字列.length 'abcde'.length // -> 5
split 指定した文字列で分割 文字列.split(区切り文字) 'a,bc,d,ef,'.split(',') // -> ['a', 'bc', 'd', 'ef', '']
replace 文字列の一部を置換する。 置換後の文字列には$を使って特殊な文字列を指定できる [☆] 文字列.replace(置換する文字列, 置換後の文字列) 'abcde'.replace('cd', 'X') // -> 'abXe'
repeat 文字列を繰り返す 文字列.repeat(回数) '無駄'.repeat(2).repeat(3) // -> '無駄無駄無駄無駄無駄無駄'
slice 文字列の一部を切り出す。終了indexの文字は含まない。 文字列.slice(開始index, 終了index?) '012345678'.slice(3, 7) // -> '3456'
substr 文字列の一部を切り出す。文字数を指定できる。 文字列.substr(開始index, 文字数) '012345678'.substr(2, 5) // -> '23456'
includes 指定した文字列が元の文字列に含まれるかどうか 文字列.includes(探す文字列) 'abcdef'.includes('cd') // -> true
startsWith 元の文字列が指定した文字列で始まっているかどうか 文字列.startsWith(文字列) 'abcdef'.startsWith('abc') // -> true
endsWith 元の文字列が指定した文字列で終わっているかどうか 文字列.endsWith(文字列) 'abcdef'.endsWith('abc') // -> false
trim 先頭と末尾の空白を取り除く 文字列.trim() ' abc '.trim() // -> 'abc'
trimStart 先頭の空白だけを取り除く 文字列.trimStart() ' abc '.trimStart() // -> 'abc '
trimEnd 末尾の空白だけを取り除く 文字列.trimEnd() ' abc '.trimEnd() // -> ' abc'
padStart 指定した文字数まで空白で埋める 文字列.padStart(長さ, 文字列?) '123'.padStart(5, '0') // -> '00123'

[☆]

記号概要
$&マッチした部分文字列
$`マッチした部分の前の文字列
$'マッチした部分の後の文字列
$$$のエスケープ
$1, $2, ...正規表現で指定したときに使う

オブジェクト

let food = {type: 'fruits', color: 'red', taste: 'sweet'}; console.log(food.type); // -> 'fruits'

プロパティを削除するときはdelete演算子を使う。

let obj = {a: 1, x: 0, b: 2}; delete obj.x; console.log(obj); // -> {a: 1, b: 2}

メソッド

名前概要使い方
keys キーの一覧を配列にする Object.keys(オブジェクト) Object.keys({a: 1, b: 2, c: 3}) // -> ['a', 'b', 'c']
values 値の一覧を配列にする Object.values(オブジェクト) Object.values({a: 1, b: 2, c: 3}) // -> [1, 2, 3]
entries キーと値の組を配列にする Object.entries(オブジェクト) Object.entries({a: 1, b: 2, c: 3}) // -> [['a', 1], ['b', 2], ['c', 3]]
freeze 変更を禁止する Object.freeze(オブジェクト)
let obj = {a: 1, b: 2}; Object.freeze(obj); obj.c = 3; // エラーにはならない console.log(obj); // -> {a: 1, b: 2}
assign 複数のオブジェクトを結合する Object.assign(コピー先, 結合元1, 結合元2, ...) Object.assign({a: 1, b: 2}, {c: 3}) // -> {a: 1, b: 2, c: 3}

配列

let a = ['apple', 'banana', 'lemmon']; let b = ['dog', , 'cat']; console.log(a[0]); // -> 'apple' console.log(b[1]); // -> undefined

スプレッド演算子を使って要素をばらして代入ができる。

let a = [4, 5]; let b = [1, 2, 3, ...a]; console.log(a); // -> [1, 2, 3, 4, 5] // 総和を計算するsumが定義されているとする sum(1, 2, 3, 4, 5) // -> 15 sum(...b) // -> 15

簡単なメソッド

名前概要使い方
isArray 配列かどうかを判定する Array.isArray(配列) Array.isArray({0: 'a', 1: 'b'}) // -> false
push 末尾に要素を追加する 配列.push(値1, 値2, ...)
let a = [1, 2]; a.push(3); // -> 3 == a.length console.log(a); // -> [1, 2, 3]
unshift 先頭に要素を追加する 配列.unshift(値1, 値2, ...)
let a = [2, 3]; a.unshift(1); // -> 3 == a.length console.log(a); // -> [1, 2, 3]
pop 末尾の要素を削除する 配列.pop()
let a = [1, 2, 3]; a.pop(); // -> 3 console.log(a); // -> [1, 2] a.length = 1; // lengthは書き換えられる console.log(a); // -> [1]
shift 先頭の要素を削除する 配列.shift()
let a = [1, 2, 3]; a.shift(); // -> 1 console.log(a); // -> [2, 3]
splice 一部を削除・置き換える 配列.splice(開始index, 要素数, 置き換え1, ...)
let a = [0, 1, 2, 0, 5]; a.splice(0, 1); // -> [0] console.log(a); // -> [1, 2, 0, 5] a.splice(2, 1, ...[3, 4]); // -> [0] console.log(a); // -> [1, 2, 3, 4, 5]
concat 複数の配列を結合する 配列.concat(配列, 配列, ...) [1].concat([2, 3], [4]) // -> [1, 2, 3, 4]
indexOf 値を先頭から検索する 配列.indexOf(値, 開始index) ['a', 'b', 'c'].indexOf('c') // -> 2
lastIndexOf 値を末尾から検索する(開始indexから左に検索する) 配列.lastIndexOf(値, 開始index) ['a', 'b', 'c'].lastIndexOf('c', 0) // -> -1
slice 配列の一部を切り出す(終了indexの要素は含まない) 配列.slice(開始index, 終了index) [1, 2, 3, 4, 5].slice(1, 3) // -> [2, 3]
join 区切り文字を挟んで値を結合し、文字列に変換する 配列.join(区切り文字) ['a', 'b', 'c'].join(', ') // -> 'a, b, c'
reverse 値を逆順にする 配列.reverse() [1, 2, 3].reverse() // -> [3, 2, 1]

コールバックを使うメソッド

名前概要使い方
forEach 各要素ごとに処理をする 配列.forEach((値, index, 元の配列) => callback)
let a = ['a', 'b', 'c']; a.forEach(x => console.log(x)) // -> 'a' // -> 'b' // -> 'c'
findIndex 条件を満たす要素を検索し、indexを返す。 配列.findIndex((値, index, 元の配列) => callback) ['a', 'b', 'c'].findIndex(x => x == 'c') // -> 2
find 条件を満たす要素を検索し、見つけた要素を返す 配列.find((値, index, 元の配列) => callback) ['apple', 'banana', 'cherry'].find(x => x.includes('na')) // -> 'banana'
some 少なくとも1つの要素が条件を満たすかどうか 配列.some((値, index, 元の配列) => callback) [1, 2, 3].some(x => x%2 == 0) // -> true
every すべての要素が条件を満たすかどうか 配列.every((値, index, 元の配列) => callback) [1, 2, 3].every(x => x%2 == 0) // -> false
sort 要素を並び替える 配列.sort((要素1, 要素2) => callback) ['bad', 'act', 'bed'].sort((x,y) => (x>y)?1:-1) // -> ['act', 'bad', 'bed']
map すべての要素に処理をして要素を書き換える 配列.map((値, index, 元の配列) => callback) [1, 2, 3].map(x => x**2) // -> [1, 4, 9]
filter 条件を満たさない要素を削除する 配列.filter((値, index, 元の配列) => callback) [1, 2, 3].filter(x => x%2==0) // -> [2]
reduce 累積計算をする 配列.reduce((途中までの値, 値, index, 元の配列) => callback) [1, 2, 3].reduce((sum, k) => sum + k) // -> 6

正規表現

フラグ

フラグ概要プロパティ
d部分文字列の一致のインデックスを生成します。hasIndices
gグローバル検索です。global
i大文字小文字を区別しない検索です。ignoreCase
m改行文字を^および$と一致させます。multiline
s.を改行文字と一致させます。dotAll
u"Unicode"です。 パターンをUnicodeコードポイントの並びとして扱います。unicode
vuモードをアップグレードし、もっと多くのUnicode機能を使用可能にします。unicodeSets
y対象とする文字列の現在位置から始めて一致する「粘着」(sticky)検索を行います。sticky

記号

アサーション

記号名前概要
^, $ 入力境界アサーション 現在の位置が入力の開始または終了であること、またはmフラグが設定されている場合は、行の開始または終了であることを表します。
(?=...), (?!...) 先読みアサーション 現在の位置が特定のパターンの後に来ること、または来ないことを表します。
(?<=...), (?<!...) 後読みアサーション 現在の位置が特定のパターンの前に来ること、または来ないことを表します。
\b, \B 単語境界アサーション 現在の位置が単語境界であることを表します。

アトム

記号名前概要
\1, \2 後方参照 その前でキャプチャグループに一致し、捕捉されたサブパターンに一致します。
(...) キャプチャグループ サブパターンに一致し、一致した情報を記憶します。
[...], [^...] 文字クラス ある文字集合に含まれる、または含まれない文字と一致します。vフラグを有効にすると、可変長の文字列にも一致するように使用することができます。
\d, \D, \w, \\W, \s, \S 文字クラスエスケープ あらかじめ設定された文字集合に含まれる、または含まれない文字と一致します。
\n, \u{...} 文字エスケープ リテラル形式では表現しにくい文字と一致します。
a, b リテラル文字 特定の文字と一致します。
\k名前 名前付き後方参照 その前で名前付きキャプチャグループに一致し、捕捉されたサブパターンに一致します。
(?名前...) 名前付きキャプチャグループ サブパターンに一致し、一致した情報を記憶します。このグループは、パターン内のインデックスではなく、独自の名前で識別することができます。
(?:...) 非キャプチャグループ 一致した情報を記憶することなく、サブパターンに一致します。
\p{...}, \P{...} Unicode文字クラスエスケープ Unicodeプロパティを指定します。vフラグを有効にすると、可変長の文字列にも一致するように使用することができます。
. ワイルドカード sフラグが設定されていない限り、改行以外の文字と一致します。

その他

記号名前概要
| 論理和 |文字で区切られた選択肢の集合のいずれかと一致します。
*, +, ?, {n}, {n,}, {n,m} 修飾子 アトムに一定回数一致します。

もくじ

ページのトップへ