728x90 전체 글89 [JS][강제변환] 암시적 강제변환 : 개요 암시적 변환 암시적 강제변환은 부수효과가 명확하지 않게 숨겨진 형태로 일어나는 타입변환이다. 즉, 우리가 보기에 분명하지 않은 타입변환은 모두 이 범주에 속한다.' 명시적 강제변환의 목적(코드를 명확하게, 이해할 수 있게 작성하는 것)은 분명하고 암시적 강제변환의 목적이 그 반대(코드를 더 이해하기 어렵게 만듦)라는 사실 또한 너무나 분명하다. 액면 그대로 받아들이다 보니 모든 오해와 노여움이 시작된 것같다. '자바스크립트 강제변환'을 향한 대부분의 불평불만이 바로 이 암시적 강제변환을 겨냥하고 있는 건 사실이다. 그럼 암시적 강제변환은 정말 유해하고 위험한 것일까? 자바스크립트 언어 설계의 버그인가? 어던일이 있어도 피하는게 상책인가? 암시적 강제변환이 무엇인지, 어떻게 활용하는지, 무조건 선량한 명시.. 2022. 2. 11. [JS][강제변환] 명시적 강제변환 : * -> 불리언 명시적 강제변환 : * -> 불리언 String(), Number()도 그렇듯이 Boolean()은 명시적인 강제변환 방법이다. var a = "0"; var b = []; var c = {}; var d = ""; var e = 0; var f = null; var g; Boolean(a); // true Boolean(b); // true Boolean(c); // true Boolean(d); // false Boolean(e); // false Boolean(f); // false Boolean(g); // false Boolean()은 분명히 명시적이지만 그리 자주 쓰이지는 않는다. +단항 연산자가 값을 숫자로 강제변환 하는 것처럼 ! 부정 단항 연산자도 값을 불리언으로 명시적으로 강제변환한다... 2022. 2. 10. [JS][강제변환] 명시적 강제변환 : 숫자 형태의 문자열 파싱 명시적 강제변환 : 숫자 형태의 문자열 파싱 문자열에 포함된 숫자를 파싱하는 것은 '문자열 -> 숫자' 강제변환과 결과는 비슷하지만, 앞서 배운 타입변환과는 분명한 차이가 있다. var a = "42"; var b = "42px"; Number(a); // 42 parseInt(a); // 42 Number(b); // NaN parseInt(b); // 42 문자열로부터 숫자 값의 파싱은 비 숫자형 문자를 허용한다. 즉, 좌 -> 우 방향으로 파싱하다가 숫자 같지 않은 문자를 만나면 즉시 종료된다. 반면, 강제변환은 비 숫자형 문자를 허용하지 않기 때문에 NaN를 내고 두 손을 들어버린다. 파싱은 강제변환의 대안이 될 수 없다. 비슷해 보여도 목적 자체가 다르다. 우측에 비 숫자형 문자가 있을지 확실하.. 2022. 2. 10. [JS][강제변환] 명시적 강제변환 : ~(틸드) 명시적 강제변환 이상한 나라의 틸드(~) ~(틸드)는 종종 사람들이 간과하는 자바스크립트의 강제변환 연산자이자, 가장 헷갈리는 연산자의 대명사이다. 심지어 사용법을 터득한 개발자마저 사용을 꺼려한다고 한다. 예를들어보자 아무 연산도 하지 않는 0 | x의 'OR'연산자는 사실상 ToInt32변환만 수행한다. 0 | -0; // 0 0 | NaN; // 0 0 | Infinity; // 0 0 | -Infinity; // 0 이러한 특수 숫자들은 32비트로 나타내는 것이 불가능 하므로 ToInt32 연산 결과는 0이다. 0 | __이 강제적인 ToInt32 연산의 명시적인 형태냐 아니면 더 암시적인 형태냐 하는 문제는 논란의 여지가 있따. 명세서 관점에서 보면 두말할 것 없이 명시적인 것이지만, 이 수준의.. 2022. 2. 10. [JS][강제변환] 명시적 강제변환 : 날짜 <-> 숫자 명시적 강제변환 날짜 숫자 +단항 연산자는 'Date 객체 -> 숫자' 강제변환 용도로도 쓰인다. 결과값이 날짜/시각 값을 유닉스 타임스탬프 표현형이기 때문이다. var d = new Date("Thu, 19 Feb 2022 08:53:06 CDT"); +d; // 1645278786000 다음과 같이 현재 시각을 타임스탬프로 바꿀 때 관용적으로 사용하는 방법이다. var timestamp = +new Date(); 생성자 호출시 전달 인자가 없다면 괄호는 생략 가능한, 기이한 자바스크립트 구문 '트릭'이 있다는 걸 알고있는 사람도 많을 것이다. 그래서 앞의 코드는 var timestamp = +new Date;처럼 서도된다. 하지만 괄호를 생략하면 가독성이 좋아진다는 말을 인정하지 않는 사람들도 있으며.. 2022. 2. 10. [JS][강제변환] 명시적 강제변환 : 문자열 <-> 숫자 명시적 강제변환 명시적 강제변환은 분명하고 확실한 타입변환이다. 개발자들이 흔히 사용하는 타입변환은 대개 이 명시적 강제변환 범주에 속한다. 명시적 강제변환은 정적 타입 언어에서 지극히 당연하다고 여겨지는 타입변환의 관례를 충실히 따르고 있기에 별다른 논쟁거리는 없다. 따라서 명시적 강제변환이 나쁜 것도 아니고, 이슈가 많은 주제도 아니라고 당연하게 받아들이자. 명시적 강제변환: 문자열 숫자 우선, 가장 간단하면서도 가장 잦은 강제변환이라 할 수 잇는 것이 '문자열 숫자' 강제 변환이다. '문자열 숫자' 강제변환은 String()과 Number() 함수를 이용하는데, 앞에 new 키워드가 붙지 않기 때문에 객체 래퍼를 생성하는 것이 아니란 점을 눈여겨보자. 다음은 두 타입 간 명시적 강제변환 예제다. v.. 2022. 2. 9. 이전 1 ··· 7 8 9 10 11 12 13 ··· 15 다음 728x90