728x90 분류 전체보기89 [JS][강제변환] 추상 연산 ToBoolean 강제변환 ToBoolean 자바스크립트에서 불리언에 대해 간단히 살펴보자. 아직도 많은 혼동과 오해를 불러일으키는 주제이다. 우선 자바스크립트에는 true와 false라는 키워드가 존재하며 우리가 예상하는 그대로 잘 작동한다. 흔히들 1과 0이 각각 true, false에 해당한다고 생각하는데 다른 언어에서는 몰라도 자바스크립트에서는 숫자는 숫자고, 불리언은 불리언으로 서로 별개다. 1을 true로 0을 false로 강제변환 할수는 있지만 그렇다고 두 값이 똑같은건 아니다. Falsy 값 지금부터가 재미있다. true/false가 아닌 값을 불리언에 상당한 값으로 강제변환 했을 때. 이 값들은 어떻게 작동할까? 자바스크립트의 모든 값은 다음 둘 둥 하나다. 불리언으로 강제변환하면 false가 되는 값 1.. 2022. 2. 9. [JS][강제변환] 추상 연산 ToBoolean 강제변환 ToBoolean 자바스크립트에서 불리언에 대해 간단히 살펴보자. 아직도 많은 혼동과 오해를 불러일으키는 주제이다. 우선 자바스크립트에는 true와 false라는 키워드가 존재하며 우리가 예상하는 그대로 잘 작동한다. 흔히들 1과 0이 각각 true, false에 해당한다고 생각하는데 다른 언어에서는 몰라도 자바스크립트에서는 숫자는 숫자고, 불리언은 불리언으로 서로 별개다. 1을 true로 0을 false로 강제변환 할수는 있지만 그렇다고 두 값이 똑같은건 아니다. Falsy 값 지금부터가 재미있다. true/false가 아닌 값을 불리언에 상당한 값으로 강제변환 했을 때. 이 값들은 어떻게 작동할까? 자바스크립트의 모든 값은 다음 둘 둥 하나다. 불리언으로 강제변환하면 false가 되는 값 1.. 2022. 2. 9. [JS][강제변환] 추상연산 ToNumber 추상연산 ToNumber '숫자 아닌 값 -> 수식 연산이 가능한 숫자' 변환 로직은 ES5 9.3 ToNumber 추상 연산에 잘 정의되어있다. 예를 들어 true는 1, false는 0이 된다. undefined는 NaN으로, null은 0으로 바뀐다. 문자열 값에 ToNumber를 적용하면 대부분 숫자 리터럴 규칙/구문과 비슷하게 작동한다. 변환이 실패하면 결과는 NaN이다. 한 가지 차이는 0이 앞에 붙는 0진수는 ToNumber에서 올바른 숫자 리터럴이라도 8진수로 처리하지 않는다는 점이다. 문자열 값에 대한 숫자 리터럴 문법과 ToNumber는 아주 세밀하고 미묘한 뉘앙스의 차이가 있어 더 이상 언급하지 않는다. 객체(그리고 배열)는 일단 동등한 원시 값으로 변환 후 그 결괏값(아직 숫자가 아.. 2022. 2. 9. [JS][강제변환] 추상 연산 ToString 추상 연산 명시적/암시적 강제변환의 세계로 떠나기 전에 어떻게 값이 문자열, 숫자, 불리언 등의 타입이 되는지, 그 기본 규칙을 알아보자. ES5를 보면 변환 규칙의 '추상 연산'이 정의되어 있다. ToString, ToNumber, ToBoolean을 집중적으로 보고 ToPrimitive는 대략만 훑어 보자. ToString '문자열이 아닌 값 -> 문자열' 변환 작업은 ES5 $9.8의 ToString 추상 연산 로직이 담당한다. 내장 원시 값은 본연의 무자열화 방법이 정해져 있다(ex) null -> "null"). 숫자는 예상대로 그냥 문자열로 바뀌고 너무 작거나 큰 값은 지수 형태로 바뀐다. 일반 객체는 특별히 지정하지 않으면 기본적으로 toString() 메서드가 내부 [[class]]를 반환.. 2022. 2. 8. [JS][강제변환] 값 변환 지금까지 자바스크립트의 타입/값에 대해 충분히 살펴보았으니 이제 말도 많고 탈도 많은 강제 변환을 살펴보자. 강제변환이 유용한 기능인지, 언어 설계상 결함인지는 처음부터 큰 논란거리였다. 값 변환 어떤 값을 다른 타입의 값으로 바꾸는 과정이 명시적이면 '타입 캐스팅', 암시적이면 '강제변환'이라고 한다. 항상 그렇지 않을 수도 있는데 자바스크립트에서 강제변환을 하면 문자열, 숫자, 불리언 같은 스칼라 원시값 중 하나가 되며 객체, 함수 같은 합성 값 타입으로 변환될 일은 없다. '박싱'은 스칼라 원시 값을 해당 객체로 감싸는 건데 정확히 말하면 '박싱'은 강제변환이 아니다. 두 용어를 이렇게 구분하는 사람들도 있다. '타입 캐스팅(또는 타입변환)'은 정적 타입 언어에서 컴파일 시점에, '강제 변환'은 동.. 2022. 2. 8. [JS][네이티브][마무리] 네이티브의 프로토타입 네이티브 프로로타입 내장 네이티브 생성자는 각자의 .prototype 객체를 가진다. prototype 객체에는 해당 객체의 하위 타입별로 고유한 로직이 담겨있다. 이를테면 문자열 원시 값을 확장한 것까지 포함하여 모든 String 객체는 기본적으로 String.prototype 객체에 정의된 메서드에 접근할 수 있다. 문서화 관례에 따라 String.prototype.XYZ는 String#XYZ로 줄여쓴다. 다른 .prototype도 마찬가지이다. String#indexOf() : 문자열에서 특정 문자의 위치 검색 String#charAt() : 문자열에서 특정 위치의 문자를 반환 String#substr(), String#substring() and String#slice() : 문자열 일부를 새로운.. 2022. 2. 8. 이전 1 ··· 8 9 10 11 12 13 14 15 다음 728x90