2022/03/8~ 3/11JSprimer(演算子①)
演算子
// +演算子で値同士を足し算する加算演算を行う // この場合、1と2の2つの値がオペランド、演算する対象です。 1 + 2;
二項演算子
// 二項演算子とオペランドの関係
左オペランド 演算子 右オペランド
プラス演算子(+)
- 2つの数値を加算する演算子です。
console.log(1 + 1); // => 2
- JavaScriptでは、数値は内部的に浮動小数点数として表現されています。
- そのため、整数と浮動小数点数の加算も型変換を行うことなく、プラス演算子のみで計算できます。
// 数値型の10を明示的に浮動小数点型に変換せずとも計算できてしまう。 // それは、数値型の値が内部的に浮動小数点数として表現されているからである。 console.log(10 + 0.5); // => 10.0 + 0.5 = 10.5
文字列結合演算子(+)
- 数値の加算に利用したプラス演算子(+)は、文字列同士の結合に利用できます。
- 文字列結合演算子(+)は、2つの文字列を結合した文字列を返します。
- 文字列と数値の加算が行われるときは、数値が暗黙的に文字列に変換されます。
const value = "文字列" + "結合"; console.log(value); // => "文字列結合" // 文字列と数値をプラス演算子で計算すると、数値の暗黙的な変換が行われ文字列に変換されます。 // 文字列に変換された数値と文字列を結合したものを返します。 console.log("文字列" + 1); // => 文字列1
[ES2016] べき乗演算子(**)
2つの数値のべき乗(2の4乗などの計算)を求める演算子です。 左オペランドを右オペランドでべき乗した値を返します。
// べき乗演算子(ES2016)で2の4乗を計算 console.log(2 ** 4); // => 16
- べき乗演算子と同じ動作をする
Math.pow
メソッドがあります。
console.log(Math.pow(2, 4)); // => 16
単項演算子(算術)
let num = 1; //どちらもnum += 1;と同じ意味 num++; // 1つのオペランドを用いて評価をしているので、単行演算子 // または ++num; // 1つのオペランドを用いて評価をしているので、単行演算子
❶単項プラス演算子(+)
// 数値の1を数値へ変換する console.log(+1); // => 1 // 数字(文字列)を数値へ変換 console.log(+"1"); // => 1 // 数値ではない文字列はNaNという値に変換される console.log(+"文字列"); // => NaN
- 以上のことから、単項プラス演算子は、数値への変換を行うことが可能です。
- しかし、単項プラス演算子は文字列から数値への変換に使うべきではありません。
- なぜなら、数値への変換は、Numberコンストラクタ関数やparseInt関数を使う明示的な変換方法が存在するためです。
NaNとは?
NaNは"Not-a-Number"の略称で、数値ではないがNumber型の値を表現しています。 NaNはどの値とも(NaN自身に対しても)一致しない特性があり、Number.isNaNメソッドを使うことでNaNの判定を行えます。
- NaNは、数値ではないNumber型の値を表現するものです。
- NaNは自分自身も含むどの値とも一致しない特性があり、厳密等価演算子を使ってもfalseしか返りません。
- NaNかどうかの判定を行う場合は、厳密等価演算子ではなくNumber.isNaNメソッドを使いましょう。
// 自分自身とも一致しない(厳密等価演算子では一致しない) console.log(NaN === NaN); // => false // Number型である console.log(typeof NaN); // => "number" // Number.isNaNでNaNかどうかを判定 console.log(Number.isNaN(NaN)); // => true
❷単項マイナス演算子(-)
- 単項マイナス演算子はマイナスの数値を表現するために使用されます。
- 例えば、-1 と書くとマイナス1を意味します。
- 単項マイナス演算子はマイナスの数値を反転できます。 そのため、"マイナスのマイナスの数値"はプラスの数値となります。
- 文字列などを数値へ変換することができます。ただし、NaNという特殊な値に変換される場合もあり、文字列から数値への変換のために使われる事は推奨されません。
- 数値へ変換できない文字列などをオペランドに指定した場合は、NaNという特殊な値に変換されます。
// 単項マイナス演算子を使って、マイナスな数値を表現 console.log(-1); // => -1 // "マイナスのマイナスの数値"をプラスの数値に符号を反転させる console.log(-(-1)); // => 1 // 文字列の1を数値へ変換 console.log(-"1"); // => -1 // 数値へ変換できない文字列などのオペランドを変換しようとすると、NaNという特殊な値になる console.log(-"文字列"); // => NaN
❸インクリメント演算子(++)
- インクリメント演算子(++)は、オペランドの数値に+1する演算子です。
- オペランドの前後どちらかにインクリメント演算子を置くことで、オペランドの値に対して+1した値を返します。
- インクリメント演算子(++)は、オペランドの後ろに置くか前に置くかで、それぞれで評価の順番が異なります。
let num = 1; num++; console.log(num); // => 2 // 次のようにした場合と結果は同じ // num = num + 1;
後置インクリメント演算子(num++
)の評価の順番
1. 評価する前の値を返す
2. 値に対して+1の評価をする
- そのため、num++
の返り値は、+1と評価する前の値になります。値が返された後に+1が行われます。
// num++で、出力される値は、+1する前の値 let num = 1; console.log(num++); // => 1 console.log(num); // => 2
前置インクリメント演算子(++num)の評価の順番
1. 値に対して+1の評価する
2. +1した評価結果を返す
- ++num
が返す値は+1した後の値です。
let x = 1; console.log(++x); // => 2 console.log(x); // => 2
❹デクリメント演算子(--)
- デクリメント演算子(--)は、オペランドの数値に
-1
の評価をする演算子です。 - デクリメント演算子は、インクリメント演算子と同様に、オペランドの前後のどちらかに置くことができます。
- デクリメント演算子も、前後どちらかの置く場所によって評価の順番が変わります。
// 後置デクリメント演算子(値が返されてから、-1の評価が行われる) let x = 1; console.log(x--); // => 1 console.log(x); // => 0 // 前置デクリメント演算子(-1の評価がされてから値が返る) let y = 1; console.log(--y); // => 0 console.log(y); // => 0