[Javascript]演算子


算術演算子


 算術演算子(arithmetic operator)は、数学計算を実行し、新しい数値を生成する.算術演算ができない場合は、NaNを返します.

にげんえんざんし



 この算術演算子(binary arithmetic operator)は、2つの被演算子を算術演算し、数値値を生成し、値を変更せず、常に新しい値を生成する.
// binary arithmetic operator
5 + 2; // 7
4 - 1; // 3
8 * 2; // 16
9 / 5; // 1.8
3 % 2; // 1

単項演算子



 単項演算子(unary arithmetic operator)は、1つの被演算子を演算し、数値を生成する.この演算子とは異なり、++/--演算子は、被演算子の値を変更する付与効果を有する.
// unary arithmetic operator
var x = 2;

// 선할당 후증가(postfix increment operator)
postfIn = x++;
console.log(postfIn, x);

// 선증가 후할당(prefix increment operator)
prefIn = ++x;
console.log(prefIn, x);

// 선할당 후감소(postfix decrement operator)
postfDe = x--;
console.log(postfDe, x);

// 선감소 후할당(prefix decrement operator)
prefDe = --x;
console.log(prefDe, x);

[실행결과]
2 3
4 4
4 3
2 2
数値タイプではなく+/-単項演算子を使用する場合、演算子は数値タイプに変換され、返されます.付随効果はありません.
// unary plus
// string -> number (O)
var plusA = '5';
console.log(+plusA);

// string -> number (X)
var plusStr = 'blue';
console.log(+plusStr);

// boolean -> number
var plusB = true;
var plusC = false;
console.log(+plusB);
console.log(+plusC);

[실행결과]
5
NaN
1
0
-単項演算子は、反転された演算子記号の値を返すこともできます.
// unary minus
console.log(-8);

// string -> number (O)
var minusA = '5';
console.log(-minusA);

// string -> number (X)
var minusStr = 'red';
console.log(-minusStr);

// boolean -> number
var minusB = true;
var minusC = false;
console.log(-minusB);
console.log(-minusC);

[실행결과]
-8
-5
NaN
-1
-0
+被演算子の1つ以上が文字列である場合、演算子は文字列接続演算子となり、その他の演算子は算術演算子となる.
// implicit coercion
// string connection
strConnect = '2' + 5;

console.log(strConnect);
console.log(typeof strConnect);

// boolean + number
console.log(1 + true);
console.log(1 + false);

// null + number
console.log(1 + null);

// undefined + number
console.log(1 + undefined);

[실행결과]
25
string
2
1
1
NaN
📌 true、false、nullはそれぞれ1、0、0に変換されます.ただし、タイプは定義されていない数値に変換されません.これを黙示型変換(implicit coercion)または型強制変換(type coercion)と呼ぶ.

割付演算子



 代入演算子(assignment operator)は、右辺の変数を左辺の変数に代入します.付随効果があります.
var x;

x = 5;
console.log(x);

x += 5;
console.log(x);

x -= 5;
console.log(x);

x *= 5;
console.log(x);

x /= 5;
console.log(x);

x %= 5;
console.log(x);

var str = 'My favorite perfume is ';

str += 'Acqua di parma.';
console.log(str);

[실행결과]
5
10
5
25
5
0
My favorite perfume is Acqua di parma.

比較演算子


 比較演算子(comparison operator)左項と右項の被演算子を比較した後、結果をboolean値に戻します.

等比演算子と一致比較演算子



 左と右の被演算子が同じ値で計算されるかどうかを比較し、boolean値を返します.対等比較演算子をばらばらに比較し、一致比較演算子を厳密に比較します.
同等比較(==)演算子左項と右項の被演算子を比較する場合、一致するタイプを暗黙のタイプで変換し、同じ値であるかどうかを比較します.便利ですが、結果は予測しにくく、ミスしやすいので、使わないほうがいいです.
// loose equality
5 == 5; // true
5 == '5'; // true
一致比較(===)演算子は、左項と右項の被演算子タイプが同じで、値が同じ場合にのみtrueを返します.
// strict equality
5 === 5; // true
5 === '5'; // false
📌 注意事項
NANは自分と一致しない唯一の値であるため、数値がNANであるかどうかを調べるには、関数isNaNを使用する必要があります.
// NaN
NaN === NaN; // false

isNaN(NaN); // true
isNaN(10); // false
isNaN(1 + undefined); // true
正0と負0を比較し、trueを返します.
// zero
0 === -0; // true
0 == -0; // true
📝 Object.is法を用いて、予測可能な正確な比較結果を返す.
// object.is method
Object.is(-0, +0); // false
Object.is(NaN, NaN); // true
浮動等比較演算子(!=)および不一致比較演算子(!==)は、それぞれ、等しい比較(==)および一致比較(===)演算子の逆概念である.
5 != 8; // true
5 != 5; // false
5 != '5'; // false

5 !== 8; // true
5 !== 5; // false
5 !== '5'; // true
// inequality
5 > 2; // true
5 > 5; // false
5 >= 5; // true
5 <= 5; // true

大小関係比較演算子



 サイズ関係比較演算子は、被演算子のサイズを比較することによってboolean値を返します.
// inequality
5 > 2; // true
5 > 5; // false
5 >= 5; // true
5 <= 5; // true

さんこうじょうけんえんざんし



 3つの条件演算子(ternary operator)は、条件式の評価結果に基づいて返される値を決定する.疑問符(?)の前の条件式はboolean型の値で評価される式であり、trueと評価されると2番目の被演算子が返され、falseと評価されると3番目の被演算子が返される.
var x = 5;
var result = x % 2 ? '홀수' : '짝수';

console.log(result);

[실행결과]
홀수
3つの条件演算子式は、値式文です.

論理演算子



 論理演算子(logical operator)は、右項および左項の被演算子を論理演算する.
// OR operator
true || true; // true
true || false; // true
false || false; // false

// AND operator
true && true; // true
true && false; // false
false && false; // false

// NOT operator
!true; // false
!false; // true
論理否定(!)演算子は常にboolean値を返し、被演算子がboolean値でない場合はデフォルトタイプをbooleanタイプに変換します.
// implicit coercion
!0; // true
!'carrot'; // false
論理(||)または論理乗(&&)演算子式の計算結果は、ブール値ではない場合があります.いずれの場合も、2つの被演算子のいずれかとして評価されます.(クイック評価)
// short-circuit evaluation
'Dog' && 'Cat'; // Cat

カンマ演算子(カンマ演算子)とグループ演算子(グループ演算子)


 カンマ(,)演算子(comma operator)は、左の被演算子から順に評価され、最後の評価が終了すると最後の被演算子の評価結果が返されます.
// comma operator
var x, y, z;

x = 1, y = 2, z = 3; // 3
 グループ演算子(group operator)は、被演算子を括弧('()')で囲み、最初に評価する.グループ化演算子を使用して、演算子の優先度を調整します.
// group operator
console.log(10 * 3 + 5);
console.log(10 * (3 + 5));

[실행결과]
35
80

タイプ演算子



  typeof演算子は、被演算子のデータ型を7つの文字列"string", "number", "boolean", "undefined", "symbol", "object", "function"のうちの1つに返す.nullは返されません.関数の場合はfunctionが返されます.type of演算子が返す文字列は、7種類のデータ型と完全に一致しません.
// typeof operator
typeof '' // string
typeof 1 // number
typeof NaN // number
typeof true // boolean
typeof undefined // undefined
typeof Symbol() // symbol
typeof null // object
typeof [] // object
typeof {} // object
typeof new Date() // object
typeof /test/gi // object
typeof function () {} // function
📌 type of演算子を使用してnull値を演算すると「object」が返されるため、nullタイプであるかどうかを確認すると、一致演算子(===)が使用されます.
// typeof null
var sample = null;

typeof sample === null; // false
sample === null; // true

指数演算子


 指数演算子(exponent operator)は、左項の被演算子をベースとし、右項の被演算子を指数反復二乗として数値を返します.
// exponent operator
2 ** 2; // 4
2 ** 2.5; // 5.65685424949238
2 ** 0; // 1
2 ** -4; // 0.0625
指数演算子を導入する前にMath.pow法を用いた.
// Math.pow method
Math.pow(2, 2); // 4
Math.pow(2, 2.5); // 5.65685424949238
Math:指数演算子はpow法よりも毒性が高い.
2 ** 2 ** 2; // 16
Math.pow(Math.pow(2, 2), 2); // 16
負の数を平方の底として繰り返し使用する場合は、カッコで囲みます.
(-3) ** 2; // 9
指数演算子は、割り当て演算子とともに使用でき、これらの演算子の中で最も優先度が高い.
var num = 7;
num **= 2;
console.log(num);

console.log(2 * 5 ** 3);

[실행결과]
49
250