- 算術演算子
- 比較演算子
- 文字列連結
- 論理演算子
- 条件演算子
- カンマ演算子
- グループ化演算子
- ビット演算子
- typeof演算子
- void演算子
- 代入演算子
- 分割演算子
- オブジェクト演算子と配列演算子
- 参考文献
算術演算子
演算子 | 説明 | 例 | 備考 |
---|---|---|---|
+ | 加算(文字列連結も可) | 3 + 2 | |
- | 減算 | 3 - 2 | |
/ | 除算 | 3 / 2 | |
* | 乗算 | 3 * 2 | |
% | 除算の余り | 3 % 2 | |
- | 単項符号反転 | -x | 符号が反転する |
+ | 単項プラス | +x | xが数値でない場合は数値への返還を試みる |
++ | 前置インクリメント | ++x | |
++ | 後置インクリメント | x++ | |
-- | 前置デクリメント | --x | |
-- | 後置デクリメント | x-- |
比較演算子
厳密等価演算子と等価演算子
演算子 | 内容 | 記号 |
---|---|---|
厳密等価演算子 (厳密不等価演算子) |
- 同じオブジェクトを参照している - プリミティブ型でデータ型も値も同じである |
=== (!==) |
等価演算子 不等価演算子 |
- 同じオブジェクトを参照している - 同じ値に変換されるとき |
== (!=) |
- 等価演算子の特徴
"1"
と1
が等価とみなされる。""(空文字)
、0
、null
、undefined
が等価とみなされる。
関係演算子
演算子 | 内容 | 例 |
---|---|---|
< | より大きい | a < b |
<= | 以上 | a <= b |
> | 未満 | a > b |
>= | 以下 | a >= b |
数値を比較する際の注意
NaN
はNaN自身
を含めどの値とも等しくなりません。NaN === NaN
はfalse
、NaN == NaN
もfalse
。
x
が数値かどうかを確認する場合は、isNaN(x)
を使用する。isNaN(x)
はx
が数字でない場合(NaN
を含む)はtrue
を返す。それ以外はfalse
を返す。
数値は全て倍精度小数点なので、小数部分を含む値を
===
で比較すると計算誤差が生じて想定通り比較できない場合がある。- JavaScriptには
Number.EPSILON
という特殊な定数(二つの定数が等しいとみなすことができる差)がある。
- JavaScriptには
if(Math.abs(x-y) < Number.EPSILON){ console.log('same value!'); } else { console.log('different value!'); }
文字列連結
+
には「数値の足し算」と「文字列の連結」の意味がある。被演算子の値を左から右に評価する。
組み合わせ 結果 両方が数値の場合 足し算 どちらかが文字列の場合 文字列の連結
console.log(3+5+"8"); // "88" console.log("3"+5+8); // "358"
論理演算子
true
とfalse
以外も扱うことが可能数値
だけでなくデータ型
も評価対象となる。
- 短絡評価が適用される
- 最初に記述された条件式から評価を実施し、評価結果が確定した時点で残りの条件式の評価を実施しなくなる。
false とみなされる値 |
true とみなされる値 |
---|---|
undefined null false 0 NaN ""(空文字列) |
任意のオブジェクト 任意の配列 " ”(空白のみの文字列) 文字列"false" |
内容 | 記号 |
---|---|
論理積(AND) | && |
論理和(OR) | || |
論理否定(NOT) | ! |
// inputName に値がセットされていないときはdefaultNameを使用する。 const inputName ="TestName"; const name = inputName || defaultName; console.log(name); const inputName2 =""; const name2 = inputName2 || {name:"defaultName"}; console.log(name2);
条件演算子
JavaScriptで唯一の三項演算子(3つの被演算子を使う)
オブジェクトの要素を初期化する際のコードのサンプル
const inputName ="TestName"; const profile = {}; profile.name = inputName ? inputName : defaultName; console.log(profile);
カンマ演算子
- 複数の式を組み合わせる
- 「複数の式を実行するが必要な値は最後の式の結果だけ」という場合に使用する
forループ
の内部で利用されることが多い
// 例1 // 1-1 let x = 0 , y = 100 , z; z = ( x++ , y++ ); console.log(z); // 100 // 1-2 x = 0 , y = 100; z = x++ , y++; console.log(z); // 0
グループ化演算子
ビット演算子
- 32ビットの符号付整数を2の歩数計式で表現したものとして被演算子を扱う。
- JavaScriptでは数値は全て倍精度浮動小数点数なので、ビット演算を実行する前に処理系が数値をすべて32ビット整数に変換し、結果を返す前に倍精度に変換します。
演算子 | 説明 | 例 |
---|---|---|
& | ビット毎のAND | 0b1010 & 0b1100 // 結果は 0b1000 |
| | ビット毎のOR | 0b1010 | 0b1100 // 結果は 0b1110 |
^ | ビット毎のXOR | 0b1010 ^ 0b1100 // 結果は 0b0110 |
~ | ビット毎のNOT | ~0b1010 // 結果は 0b0101 |
<< | 左シフト | 0b1010 << 1 // 結果は 0b10100 0b1010 << 2 // 結果は 0b101000 |
>> | 符号を維持する右シフト | 0b1010 << 1 // 結果は 0b10100 0b1010 << 2 // 結果は 0b101000 |
>>> | ゼロ埋め右シフト |
let n = 22; console.log(n.toString(2)); // 10110 console.log((n >> 1).toString(2)); // 1011 console.log(n >>> 1).toString(2)); // 1011 n = ~n; console.log(n.toString(2)); // -10111 n++; console.log(n.toString(2)); // -10110 console.log((n >> 1).toString(2)); // -1011 console.log((n >>> 1).toString(2)); // 1111111111111111111111111110101
typeof演算子
- JavaScriptの7つのデータ型に正確に対応していない
console.log(typeof undefined); // "undefined" console.log(typeof null); // "object" <- 実際の型と不一致 console.log(typeof {}); // "object" console.log(typeof []); // "object" console.log(typeof true); // "boolean" console.log(typeof 1); // "number" console.log(typeof ""); // "string" console.log(typeof Symbol()); // "symbol" console.log(typeof function(){}); // "function"
void演算子
- 被演算子を評価したうえで、
undefined
を返す
代入演算子
- 値を変数に代入する
演算子 | 意味 |
---|---|
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
x <<= y | x = x << y |
x >>= y | x = x >> y |
x >>>= y | x = x >>> y |
x &= y | x = x & y |
x |= y | x = x | y |
x ^= y | x = x ^ y |
分割演算子
- オブジェクトや配列を複数の要素に簡単に分割できる
// 1 const obj = {b:2,c:3,d:4}; const {a,b,c} = obj; console.log(a); // undefined console.log(b); // 2 console.log(c); // 3 console.log(d); // Uncaught ReferenceError: d is not defined // 2 const obj = {b:2,c:3,d:4}; let a,b,c; ({a,b,c} = obj); console.log(a); // undefined console.log(b); // 2 console.log(c); // 3 console.log(d); // Uncaught ReferenceError: d is not defined // 3 const arr = [1,2,3]; let [x,y] = arr; console.log(x); // 1 console.log(y); // 2 // 4 const arr = [1,2,3,4,5]; let [x,y,...rest] = arr; console.log(x); // 1 console.log(y); // 2 console.log(rest); // [3,4,5] // 5 let a = 5, b = 10; [a,b] = [b,a]; console.log(a); // 10 console.log(b); // 5
オブジェクト演算子と配列演算子
演算子 | 説明 |
---|---|
. | プロパティ(メンバー)へのアクセス |
delete | (プロパティ(メンバー))の削除 |
[] | 計算値でのメンバーアクセス |
in | プロパティの有無を調べる |
new | オブジェクトのインスタンスを生成する |
instanceof | プロトタイプチェインをテストする |
... | 展開 |