.jpg)
: 부수 효과가 명확하지 않게 숨겨진 형태로 일어나는 타입변환
📍 불필요한 상세 구현 줄이는게 목표
임의의 타입 → Sometype 타입 변환
⚠️ 명시적 강제변환이 물론 좋지만 무조건적으로 암시적 강제변환이 나쁜건 아니다.
🔹 + 연산자 : 숫자의 덧셈 or 문자열 접합으로 오버로드 → 어떻게 두개의 연산을 구분?
a + "" : 숫자를 문자열로 강제 변환하는 관용코드 (암시적 강제변환임)🔹 - 연산자 : 숫자 뺄셈 기능이 전부
a - 0 : a 값을 숫자로 강제변환👍 복잡한 형태의 불리언 로직을 숫자 덧셈 형태로 단순화 할 때 편리함
🔹 !!arguments[i] : true/false로 강제 변환
🔹 if () 문의 조건 표현식
🔹 for ( ; ; ) 에서 두 번째 조건 표현식
🔹 while () 및 do ... while() 루프의 조건 표현식
🔹 ? : 상항 연산 시 첫 번째 조건 표현식
🔹 || 및 && 의 좌측 피연산자
📍 콘텍스트에서 불리언이 아닌 값이 사용되면 일단 불리언 값으로 암시적 강제변환 됨.
&& 와 || 연산자💡 자바스크립트에서 두 연산자는 다른 언어와 달리 실제로 결괏값이 논리 값이 아님!!
⇒ && 또는 || 연산자의 결괏값이 반드시 불리언 타입이어야 하는 것은 아니며 항상 두 피연산자 표현식 중 어느 한쪽 값으로 귀결됨
a || b;
a ? a : b; //위와 같은 코드
a && b;
a ? b : a; //위와 같은 코드
⚠️ " " 값은 falsy값임
🔹 || 연산자
🔹 && 연산자
📍 복합 논리 표현식의 작동 방식
: 심벌 -> 문자열 명시정 강제변환은 👌, 암시적 강제변환은 ❌
🖐️ BUT! 불리언 값으로는 명시적/암시적 모두 강제변환 가능
🔹 느슨한 동등 비교 : == ➡️ 강제변환 ⭕
🔹 엄격한 동등 비교 : === ➡️ 강제변환 ❌
📌 강제 변환이 필요하다면 == 필요하지 않다면 === 사용
: == 연산자 로직은 추상적 동등 비교 알고리즘
📍 객체의 느슨한 동등 비의 경우 정확히 똑같은 값에 대한 레퍼런스일 경우에만 동등 ➡️ 강제변환 일어나지 않음!
var a = 42;
var b = "42";
a === b; // false
a == b; // true
🔹 ===는 강제 변환이 안되므로 false
🔹 == 는 피연산자의 타입이 다르면 비교알고리즘에 의해 피연산자 값이 암시적으로 강제변환되어 true
var x = true;
var y = "42";
x == y; //false
📍 == true or == false 와 같은 코드는 안쓰는 것이 좋음
=== 는 괜찮아요!
🔹 null과 undefined를 느슨한 동등 비교하면 강제변환
🔹 이 강제변환은 안전하고 예측 가능하며, 어떤 다른 값도 비교 결과 긍정 오류를 할 가능성이 없음
var a = "abc";
var b = Object( a );
a === b; //false
a == b; //true
var x = null;
var y = Object( x );
x == y; // false
var c = undefined;
var d = Object( c );
c == d; //false
var e = NaN;
var f = Object( e );
e == f; //false
NaN == NaN이 되어 false가 됨"0" == false; //true
false == 0; //true
false == ""; //true
false == []; //true
"" == 0; //true
"" == []; //true
0 == []; //true
➡️ 긍정 오류
[] == ![] //true
2 == [2]; //true
"" == [null]; //true
0 == "\n"; //true
: a < b 비교 과정
🔹 피연산자 모두 문자열일 때
🔹 그 외의 경우
📍 자바스크립트 엔진은 <= 를 '더 크지 않은'(!(a > b) → !(b < a))의 의미로 해석