wa_ter_ve
Javascript 1-4 연산자 본문
📌 1. 산술 연산자 (Arithmetic Operators)
+ : 덧셈
- : 뺄셈
* : 곱셈
/ : 나눗셈
% : 나머지 연산 (나눗셈의 나머지를 반환)
++ : 증가 연산자 (값을 1 증가)
-- : 감소 연산자 (값을 1 감소)
📌 2. 할당 연산자 (Assignment Operators)
= : 값 할당
+= : 덧셈 후 할당 ( x = x+2는 x += 2와 같음 )
-= : 뺄셈 후 할당
*= : 곱셈 후 할당
/= : 나눗셈 후 할당
%= : 나머지 후 할당
📌 3. 비교 연산자 (Comparison Operators)
- 두 값을 비교하여 true/false 반환
== : 값이 같은가? (자동 형 변환 허용)
=== : 값과 타입이 모두 같은가? (엄격한 비교)
!= : 값이 다른가?
!== : 값과 타입이 모두 다른가?
> / < : 크거나/작은가?
>= / <= : 이상/이하인가?
console.log(5 == '5'); // true (자동 형 변환)
console.log(5 === '5'); // false (타입 불일치)
console.log(5 != '5'); // false (자동 형 변환 후의 값 일치)
console.log(5 !== '5'); // true (타입 불일치)
console.log(5 > 3); // true
console.log(5 <= 5); // true
📌 4. 논리 연산자 (Logical Operators)
- 불리언 값과 함께 사용, true/false 반환
&& : 논리 AND (모든 조건이 참일 때 true 반환)
|| : 논리 OR (하나 이상의 조건이 참일 때 true 반환)
! : 논리 NOT (값을 반대로 바꿈)
let a = true;
let b = false;
console.log(a && b); // false (둘 중 하나가 false면 false)
console.log(a || b); // true (하나만 true면 true)
console.log(!a); // false (a가 true이므로 반대값 false)
📌 5. 삼항 연산자 (Ternary Operator)
- 조건 ? 참일 때 값 : 거짓일 때 값
let age = 19;
let status = (age >= 19) ? "성인. 주류 판매 가능." : "미성년자. 주류 판매 불가능";
console.log(status);
성인. 주류 판매 가능.
📌 6. 타입 연산자 (Type Operators)
- typeof : 변수 또는 값의 데이터 타입을 반환
- instanceof : 객체가 특정 클래스의 인스턴스인지 확인
📌 7. 비트 연산자 (Bitwise Operators)
- 2진수 비트 단위로 연산 수행
& : 비트 AND
| : 비트 OR
^ : 비트 XOR
~ : 비트 NOT
<< : 왼쪽 시프트
>> : 오른쪽 시프트
>>> : 부호 없는 오른쪽 시프트
📌 자바스크립트의 특성
→ 자바스크립트에서 동등 연산자(==)는 '형 변환'을 수행하는데 이로 인해 생긴 문제점.
✅ 형 변환 규칙
- 숫자와 문자열을 비교할 때, 문자열을 숫자로 변환.
- 피연산자 중 하나가 Boolean 타입일 경우, true는 1로 false는 0로 변환.
- 객체와 숫자/문자열을 비교할 경우, 객체를 valueOf()나 toString()으로 변환. (참조형을 숫자, 문자열 등 기본형으로 변환할 수 있는 메소드들 사용)
0 == "0" // true
숫자 타입과 문자열 타입 사이의 비교
자바스크립튼의 형 변환에 의해 문자열 "0"이 숫자 0으로 변환됨.
0 == 0
따라서 숫자형 0 두 값은 서로 값이 같기에 true
0 == [ ] // true
숫자 타입과 빈 배열 타입 사이의 비교
자바스크립트는 빈 배열을 숫자로 변환 할 때, 문자열로 변환 후 숫자로 변환함.
빈 배열 [ ] → 빈 문자열 " " → 숫자 0
0 == 0
따라서 숫자형 0 두 값은 서로 값이 같기에 true
"0" == [ ] // false
문자열과 참조형(배열) 사이의 비교
빈 배열 [ ] → 빈 문자열 " " 변환.
"0" == " "
문자 타입 0과 빈 문자열 " "은 값이 같지 않기에 false
* === 연산자로 수행했을 시에는, 모두 false (형 변환 적용X)
(0.1 + 1.1 == 1.2) // false
Why?
→ 부동 소수점 정밀도 문제
자바스크립트의 숫자 저장 형식(64비트 IEEE 754형식 사용)은 소수점을 정확하게 표현하기에 한계가 있음.
일부 소수를 2진수로 표현이 불가능하여 근사값으로 저장함.
위 예시에서 보면, 0.1과 같은 숫자는 2진수로 표현이 불가능 하여 저장되는 값이 정확히 0.1이 아님.
따라서 자바스크립트 엔진 내에서 계산된 값이 우리가 생각하는 답인 1.2과 차이가 있기에 결과적으로 false가 반환된 것.
* 부동 소수점 문제 해결 방법:
소수점 아래 오차 범위를 설정하여 비교.
'공부 > 자바스크립트' 카테고리의 다른 글
Javascript 2 DOM (5) | 2024.10.07 |
---|---|
GDG-WEB 2주차 과제 (0) | 2024.10.01 |
Javascript 1-3 제어문 (0) | 2024.09.30 |
Javascript 1-2 변수와 데이터 타입 (0) | 2024.09.29 |
Javascript 1-1 기본 개념 (0) | 2024.09.29 |