" > - < !! "
사람 : 우와 ! 귀여운 이모티콘이다!
??? : 대소 관계 비교 연산자와 이항 산술연산자 그리고 마지막으로 논리연산자까지 ;
자 연산자는 하나 이상의 표현식을 대상으로 여러가지 연산을 수행하여 하나의 값을 만들게 한다
이때, 표현식을 우린 "피연산자"라고 하고 피연산자는 값으로 평가되는 표현식이여야한다.. 머 전 챕터에서 배웠듯이 표현식은 "값으로 평가가 되는 것들"을 애기하니 같은 맥락이다.
마지막으로 피연산자와 연산자가 조합이된다면 새로운 값이 생성이되고 그 또한 표현식이여야 하겠죠? 안나오면 문제가 있는겁니다!
// 산술 연산자
5 * 4 // -> 20
// 문자열 연결 연산자
'My name is' + 'Lee' // -> 'My name is Lee'
// 할당 연산자
color = 'red' // -> 'red'
// 비교 연산자
3 > 5 // -> false
// 논리 연산자
true && false // -> false
// 타입 연산자
자 이제 연산자의 종류를 한번 알아 봅시다 !
모두가 어렸을 때, 철수가 주는 사과를 먹기 위해서 한번쯤은 몇개인지 세어야했던 시절이 있었을 거다.
맞다 그거다 덧셈 ,뺼셈 등 새로운 값(표현식)이 나오게 하는 것을 말한다.
이제 여기서, 개발자라면 하나 더 알고가자. 산술 연산이 불가능하다? 그럼 , NaN으로 변환한다는 것을..
이 아래 표는 꼭 피연산자가 2개이상을 가지고 있을 때 적용할 수 있는 이항 산술 연산자이다.
모든 이항 산술 연산자는 파연산자의 값을 변경하는 부수효과가 없다, 바꾸는것이 아니 새로운 값을 창조한다
부수효과가 나왔다는 말은 부수효과가 있는 연산자도 있다는 것이겠죠? 바로 "단항 산술 연산자"이다
단항 산술 연산자는 한 개의 피연산자를 산술 연산하여 숫자 값을 만든다.
var x = 1;
// ++ 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
x++; // x = x + 1;
console.log(x); // 2
// -- 연산자는 피연산자의 값을 변경하는 암묵적 할당이 이뤄진다.
x--; // x = x - 1;
console.log(x); // 1
증감 연산자는 위치에 따라 다른 의미를 가진다.
var x = 5, result;
// 선할당 후증가
result = x++;
console.log(result, x); // 5 6
// 선증가 후 할당
result == ++x;
console.log(result, x); // 7 7
// 선할당 후감소
result = x--;
console.log(result, x); // 7 6
// 선감소 후할당
result = --x;
console.log(result, x) // 5 5
이와 다르게 +/- 단항 연산자는 부수효과가 없다.
+10; // 10
+(-10) // -10
얘네는 피연산자를 숫자타입으로 변환하여 반환하기에 타입을 변경하지 값을 변경하는게 아니라 부수효과가 없다
// 문자열을 숫자로 타입 변환한다.
-'10'; // -> -10
// 불리언 값을 숫자로 타입 변환한다.
-true; // -> -1
// 문자열은 숫자로 타입 변환할 수 없으므로 NaN을 반환한다.
-'Hello'; // -> NaN
-(-10); // -> 10 이니 얘도 부수효과 x
// 문자열 연결 연산자
'1' + 2; // -> '12'
1 + '2'; // ->'12'
// 산술 연산자
1 + 2; // -> 3
// true는 1로 타입 변환된다.
1 + true; // -> 2
// false는 0으로 타입 변환된다.
1 + false; // -> 1
// null은 0으로 타입 변환된다.
1 + null; // -> 1
// undefined는 숫자로 타입 변환되지 않는다.
+undefined; // -> NaN
1 + undefined; // -> NaN
할당연산자는 조금 계산방향이 다르다 좌향 -> 우향이 아닌 우향->좌향 의 순서고
정확히는 " 우향에 있는 피연산자의 평가 결과를 좌향에 있는 변수에 할당한다"
그렇기에 변수 값이 변하는 부수효과가 있다!
이전 챕터에서 표현식은 값으로 평가될 수 있는 문이고, 문에는 표현식인 문과 표현식이 아닌 문이 있다했는데,
할당문은 표현식이다. 할당은 변수의 값을 저장하는 것으로 배웠고 아래처럼도 쓰일 수 있다.
var x;
//할당문은 표현식이다.
console.log(x = 10); // 10
좌항과 우항의 피연산자를 비교하여 그 결과를 불리언 값으로 반환하는것.
if 나 for 문에 많이 사용된다
동등/일치 비교 연산자
동등비교 연산자는 느슨한 비교
일치 비교 연산자는 엄격한 비교가 포인트이다
// 동등 비교
5 == 5; // -> true
// 타입은 다르지만 암묵적 타입 변환을 통해 타입을 일치시키면 동등하다.
5 == '5'; // -> true
동등 비교 연산자는 예측하기 어렵고 실수하기도 쉽다. 그러므로 동등 비교 연산자보다는 일치 비교 연산자를 사용하는 것이 좋다.
// 동등 비교 연산자
'0' == ''; // false
0 == ''; // true
0 == '0'; // true
false == 'false'; // false
false == '0'; // true
false == null // false
false == undefined // false
// 일치 비교
5 === 5; // -> true
// 암묵적 타입 변환을 하지 않고 값을 비교한다.
// 즉, 값과 타입이 모두 같은 경우만 true를 반환한다.
5 === '5'; // -> false
// NaN은 자신과 일치하지 않는 유일한 값이다.
NaN === NaN; // -> false
// Number.isNaN 함수는 지정한 값이 NaN인지 확인하고 그 결과를 불리언 값으로 반환한다.
Number.isNaN(NaN); // -> true
Number.isNaN(10); // -> false
Number.isNaN(1 + undefined); // -> true
또한 숫자 0의 비교에도 주의해야 한다.
0 === -0 // true
0 == -0 // true
숫자 0의 경우 동등/일치 비교 연산자 모두 비교 결과는 true를 반환한다.
부동등/불일치 비교 연산자는 각각 동등/일치 비교 연산자의 반대 개념이다.
대소 관계 비교 연산자
대소 관계 비교 연산자는 좌 우항의 피연산자의 크기를 비교하여 불리언 값을 반환환다.
var x = 2;
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환된다.
var result = x % 2? '홀수' : '짝수';
console.log(result) //짝수
var x = 2, result;
// 2 % 2는 0이고 0은 false로 암묵적 타입 변환된다.
if (x % 2) result = '홀수';
else result = '짝수';
console.log(result); // 짝수
var x = 10;
// if..else 문은 표현식이 아닌 문이다. 따라서 값처럼 사용할 수 없다.
var result = if (x % 2) { result = '홀수'; } else { result = '짝수'; }
// SyntaxError: Unexpected token if
조건에 따라 어떤 값을 결정할 때는 삼항 조건 연산자 표현식
조건에 따라 수행해야 할 문이 하나가 아니라 여러개라면 if else문이 가독성이 좋다
!의 논리 부정 연산자는 불리언값으로 타입을 반환하기에 암묵적으로 타입을 변환한다(불리언 값이 아니면)
!0; // true
!'Hello'; // false
var x, y, z;
x = 1, y = 2, z = 3; // 3
10 * 2 + 3; // -> 23
// 그룹 연산자를 사용하여 우선순위를 조절
10 * (2+3); // -> 50
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'
typeof 연산자로 null을 연산하면 'null'이 아닌 'object'가 반환된다.
이는 자바스크립트의 첫 번째 버전의 버그다. 하지만 기존 코드에 영향을 줄 수 있기 때문에 아직까지 수정되지 못하고 있다.
그러므로 값이 null타입인지 확인할 때는 typeof연산자가 아닌 일치 연산자를 사용해야한다.
var foo = null;
typeof foo === null; // false
foo === null; // true
선언하지 않은 식별자를 typeof 연산자로 연산하면 ReferenceError가 발생하지 않고 undefined가 반환된다.
typeof undeclared; // undefined
2 ** 2; // 4
2 ** 0; // 1
2 ** -2; // 0.25
Math.pow(2, 2); // 2
2 ** (3 ** 2); // 512
Math.pow(2, Math.pow(3,2)); // 512
//음수를 거듭제곱의 밑으로 사용해 계산하려면 다음과 같이 괄호로 묶어야 한다.
(-5) ** 2; // 25
// 할당 연산자와 함께 사용할 수 있다.
var num = 5;
num **= 2; //25
//지수 연산자는 이항 연산자 중에서 우선순위가 가장 높다.
2 * 5 ** 2; // 50
여기서 얘기하지 않은 연산자는 다음 챕터에 연결되어 소개될거지만, 맛보기로 보여준다!
var x;
// 할당 연산자는 변수 값이 변하는 부수 효과가 있다. 이는 x 변수를 사용하는 다른 코드에 영향을 준다.
x = 1;
console.log(x); // 1
// 증가/감소 연산자(++/--)는 피연산자의 값을 변경하는 부수효과가 있다.
// 피연산자 x의 값이 재할당되어 변경된다. 이는 x 변수를 사용하는 다른 코드에 영향을 준다.
x++;
console.log(x); // 2
var o = { a: 1};
// delete 연산자는 객체의 프로퍼티를 삭제하는 부수 효과가 있다. 이는 o 객체를 사용하는 다른 코드에 영향을 준다.
delete o.a;
console.log(o); // {}
말그대로 가장 먼저 실행해야하는것들을 말한다.
말그대로 무엇부터 연산을 해야하는지의 순서를 말한다.
예를 들어, 5+2 = 7 은 ->쪽으로 연산을 하고 , x += 5 는 5를 x에 더하여 다시 x에게 주는 방식이기에 <-이다
[모던 자바스크립트] 12장 함수 (0) | 2024.04.17 |
---|---|
[모던 자바스크립트] 10장 객체 리터널 (0) | 2024.04.09 |
[모던자바스크립트] 6장 데이터 타입 (0) | 2024.03.28 |
[모던 자바스크립트] 5장 표현식과 문 (0) | 2024.03.28 |
[모던자바스크립트] 4장 변수 (0) | 2024.03.27 |