2022/03/8~ 3/11JSprimer(演算子①)

演算子

// +演算子で値同士を足し算する加算演算を行う
// この場合、1と2の2つの値がオペランド、演算する対象です。
1 + 2;

二項演算子

// 二項演算子とオペランドの関係
左オペランド 演算子 右オペランド

プラス演算子(+)

  • 2つの数値を加算する演算子です。
console.log(1 + 1); // => 2
// 数値型の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
  • べき乗演算子はES2016で後から追加された演算子であるため、関数演算子の両方が存在しています。

単項演算子(算術)

let num = 1;

//どちらもnum += 1;と同じ意味
num++; // 1つのオペランドを用いて評価をしているので、単行演算子
// または
++num; // 1つのオペランドを用いて評価をしているので、単行演算子

❶単項プラス演算子(+)

  • 単項演算子+は数値や数値以外のオペランド数値に変換する演算子です。
  • 数値に変換できない文字列などはNaNという特殊な値へと変換されます。
// 数値の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

❸インクリメント演算子(++)

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の評価が行われる)
let x = 1;
console.log(x--); // => 1
console.log(x);   // => 0

// 前置デクリメント演算子(-1の評価がされてから値が返る)
let y = 1;
console.log(--y); // => 0
console.log(y);   // => 0

参照

JSPrimer