[JavaScript]자바스크립트 강제변환 - 1
2021. 7. 11. 22:05ㆍWeb_Programming/JavaScript
💻 4.1 값 변환
자바스크립트의 타입변환
💡 암시적 강제변환
부수효과로부터 발생하는 타입변환
💡 명시적 강제변환
의도적으로 타입변환
var a = 43;
var b = a + ""; //암시적 강제변환
var c = String(a) //명시적 강제변환
💻 4.2 추상 연산
📍 ToString
명시적으로도 가능 & 문자열 콘텍스트에 문자열 아닌 값이 있으면 자동 호출
💡 숫자
toString() 을 통해 그냥 문자열로 바뀜.
+ 큰 숫자는 지수형태
💡 일반 객체
기본적으로 Object.prototype.toString()메서드가 내부 [[Class]]를 반환
(ex. [object Object])
💡 배열
배열은 기본적으로 모든 원소 값이 ','로 분리된 형태로 이어짐
var a =[1, 2, 3];
a.toString(); // "1,2,3"
💡 JSON 문자열화
JSON.stringfy()
- ToString 문자열 강제 변환과 동일 방식
- toJSON() 으로 인한 강제변환
이는 JSON 안전값일 경우 👉 문자열 변환
아닐 경우 (undefined, 함수, 심벌) 👉 배열 속이면, null 객체 속성이면, 지워버림.
아닐 경우, toJSON() 함수를 통해 JSON안전 값으로 변경 후, stringfy진행
var a = {
val : [1, 2, 3],
toJSON: function(){
return this.val.slice(1);
}
};
JSON.stringfy(a); // "[2, 3]"
➕ JSON.stringfy() 두번째 인자에 배열/함수형태의 대체자 를 넣어 객체를 재귀적으로 질렬화하여 필터링 가능
배열 대체자
원소는 문자열, 해당 원소의 속성값만 직렬화 진행
var a ={
b:42,
c:"42",
d:[1, 2, 3]
}
JSON.stringfy(a, ["b", "c"]); //"{"b":42, "c":"42}"
함수 대체자
객체와 객체 속성에 대해서 키와 값을 반환하며 직렬화
var a ={
b:42,
c:"42",
d:[1, 2, 3]
}
JSON.stringfy(a, fuction(k,v){
if(k!=="a")return v;
}); //"{"b":42, "c":"42}"
📍 ToNumber
예시 ture 1 | false 0 | undefined NaN| null 0
💡 문자열 ToNumber
숫자 리터럴 규칙과 비슷, 변환 실패 하면 NaN
💡객체 ToNumber
동등한 원시값으로 변환 👉 결과값 강제 변환
아래 순서로 작동
- valueOf() 사용 가능여부 확인 👉 반환 👉 강제변환
- toString() 사용 가능여부 확인 👉 반환 👉 강제변환
- TypeError
📍 ToBoolean
💡 Falsy 값
- undefined
- null
- false
- +0,-0, NaN
- ""
위 값들의 경우만 강제변환시 false
💡 Truthy 값
falsy 목록 외의 값들.
falsy 값들의 문자열화 | 빈 배열 & 빈 객체 모두 truthy값
💻 4.3 명시적 강제변환
📍 문자열 <-> 숫자
String() Number() 이용
+객체 래퍼를 생성하는 것 ❌
var a = String(42); //"42"
var b = Number("3.14"); //3.14
💡 toString, +
var a = 42
var b = a.toString()//"42"
var c = "3.14";
+c; //3.14
toString
42는 toString() 메소드가 없어, 객체 래퍼로 박싱 후 변환해주는 암시적+명시적 작동
단항 연산자(+)
숫자로 강제 변환 가능
💡 틸드(~)
32비트 ToInt32로 강제변환 후 NOT연산 수행(거꾸로 뒤집기)
indexOf()
특정문자 검색 👉 없으면 -1반환 있으면 인덱스반환
틸드는 -1을 false로 변경해줍니다. ~x=-(x+1)
var a = "hello";
~a.indexOf("lo"); //truthy
~a.indexOf("w"); //falsy
비트잘라내기 (~~)
문자열을 ToInt32로 강제 변환후, 원상태로 다시 변환.
+음수에서는 사용주의
📍 숫자 형태의 문자열 파싱
💡 parseInt()
- 비숫자형 문자 허용
- 문자를 만나기 이전까지, 숫자로 파싱
💡 강제변환
- 비숫자형 문자 허용❌
- NaN반환
var a = "42px";
Number(a);//NaN
parseInt(a);//42
📍 * -> boolean
Boolean() !! 를 이용하여 강제 변환 가능
삼항 연산자
a ? true : false
a를 불리언으로 강제변환
❗ 위 방법 대신, !! Boolean()사용 권장
'Web_Programming > JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 스코프 (0) | 2021.07.20 |
---|---|
[JavaScript]자바스립트 문법 (0) | 2021.07.18 |
[JavaScript]자바스크립트 강제변환 - 2 (0) | 2021.07.14 |
[JavaScript]자바스크립트 네이티브 (0) | 2021.07.09 |
[JavaScript]자바스크립트의 타입& 값 (1) | 2021.07.06 |