728x90 분류 전체보기89 [JS][강제변환] 동등비교 : null -> undefined, 객체 -> 비객체 동등비교 : null -> undefined null과 undefined 간의 변환은 느슨한 동등 비교 == 이 암시적 강제변환을 하는 또 다른 예이다. ES5 11.9.3.2-3을 살펴보면 x가 null이고 y가 undefined면 true를 반환한다. x가 undefined이고 y가 null면 true를 반환한다. null과 undefined를 느슨한 동등 비교하면 서로에게 타입을 맞춘다(강제변환 한다.). 언어 전체를 눈 씻고 찾아봐도 다른 값은 끼어들 여지가 없다. 즉, null과 undefined는 느슨한 동등 비교 시 상호 간의 암시적인 강제변환이 일어나므로 비교 관점에서 구분이 되지 않는 값으로 취급되는 것이다. var a = null; var b; a == b; // true a == nu.. 2022. 2. 12. [JS][강제변환] 동등비교 : 문자열 -> 숫자, * -> 불리언 동등비고 : 문자열 -> 숫자 == 강제변환 예제를 살펴보자. var a = 42; var b = "42"; a === b; // false a == b; // true 예상대로 a === b는 false다. 강제변환이 허용되지 않는 데다 42와 "42"는 그냥 봐도 다른 값이기 때문이다. 하지만 느슨한 동등 비교 a == b에서는 피연산자의 타입이 다르면, 비교 알고리즘에 의해 한쪽 또는 양쪽 피연산자 값이 알아서 암시적으로 강제변환 된다. 그런데 정확히 어떻게 강제변환이 일어나는 걸까? 42가 문자열로 바뀌어 a가 되는 걸까 아니면 "42"가 숫자로 바뀌어 b가 되는 걸까? ES5 11.9.3.4-5 원문을 보면 Type(x)가 Number고 Type(y)가 String이면, x == ToNumber.. 2022. 2. 12. [JS][강제변환] 느슨한/엄격한 동등 비교 ( ==, ===) 느슨한/엄격한 동등 비교 느슨한 동등비교는 ==연산자를, 엄격한 동등비교는 ===연산자를 각각 사용한다. 두 연산자 모두 두 값의 '동등함'을 비교하지만 '느슨함'과 '엄격함'이라는 아주 중요한 차이점이 있고 특히 동등함의 판단 기준이 다르다. 많은 이들이 종종 "==는 값의 동등함을, ===은 값과타임 모두의 동등함을 비교한다"라고 오해한다. 그럴듯 하지만 정확하진 않다. 엄청나게 많은 자바스크립트 책들에 그렇게 씌어있지만 불행하게도 다 틀렸따. 정확한 정의를 내려보자. "동등함의 비교 시 ==는 강제변환을 허용하지만, ===는 강제변환을 허용하지 않는다" 비교 성능 전자의 정의와 후자의 정의를 잠시 음미해보자. 전자에 의하면 ===는 타입까지 체크하므로 ==에 비해 할일이 많다. 후자에 따르면 오히려.. 2022. 2. 12. [JS][강제변환] 암시적 강제변환 : * -> 불리언, || 와 && 연산자 암시적 강제변환 : * -> 불리언 이번에 볼 것은 불리언 값으로의 암시적 강제변환이다. 가장 평범하면서도 가장 골칫거리다. 암시적 강제변환은 어떤 값이 강제로 바뀌어야 하는 방향으로 사용할 때 발생한다는 것을 기억하자. 숫자, 문자열 연산에서 일어나는 강제변환은 쉽게 알아챌 수 있다. 다음은 불리언으로의 강제변환이 일어나는 표현식을 열거한 것이다. if()문의 조건 표현식 for( ; ; )에서 두 번째 조건 표현식 while() 밑 do..while() 루프의 조건 표현식 ? : 삼항 연산 시 첫 번째 조건 표현식 || 및 &&의 좌측 피연산자. 이런 콘텍스트에서 불리언 아닌 값이 사용되면, ToBoolean 추상연산 규칙에 따라 일단 불리언 값으로 암시적 강제변환 된다. var a = 42; var.. 2022. 2. 11. [JS][강제변환] 암시적 강제변환 : 불리언 -> 숫자 암시적 강제변환 : 불리언 -> 숫자 암시적 강제변환의 효용성은 복잡한 형태의 불리언 로직을 단순한 숫자 덧셈 형태로 단순화할 때 빛을 발한다. 범용적인 기법은 아니지만 특정 상황에선 기발안 해법이 될 수 있다. function onlyOne(a, v, c) { return !!((a && b && c) || (!a && b && c) || (!a && !b && c)); } var a = true; var b = false; onlyOne(a, b, b); // true onlyOne(b, a, b); // true onlyOne(a, b, a); // false onlyOne()는 세 인자 중 정확히 하나만 true/truthy인지 아닌지를 확인하는 함수로 truthy 체크 시 암시적 강제변환을 하고.. 2022. 2. 11. [JS][강제변환] 암시적 강제변환 : 문자열 <-> 숫자 암시적 강제변환 : 문자열 숫자 앞서 살펴보았던 '문자열 숫자'의 명시적 강베변환을 이제부터 암시적 강제변환 방식으로 살펴보자. 그 전에 암시적 강제변환을 일으키는 연산의 의미를 알아보자. +연산자는 '숫자의 덧셈, 문자열 접합' 두 가지 목적으로 모버로드 된다. 자바스크립트 엔진은 연산자를 보고 어떤 연산을 해야 할지 어떻게 알까? var a = "42"; var b = "0"; var c = 42; var d = 0; a + b; // "420" c + d; // 42 결괏값이 "420"으로 나올 때와 42로 나올 때는 어떤 차이가 있을까? 피연산자가 한쪽 또는 양쪽 모두 문자열인지 아닌지에 따라 +연산자가 문자열 붙이기를 할지 결정한다고 보통 잘못 알고있는 경우가 많다. 부분적으론 맞지만 실상은 그.. 2022. 2. 11. 이전 1 ··· 6 7 8 9 10 11 12 ··· 15 다음 728x90