[JavaScript]자바스크립트 강제변환 - 1

2021. 7. 11. 22:05Web_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

동등한 원시값으로 변환 👉 결과값 강제 변환

 

아래 순서로 작동

  1. valueOf() 사용 가능여부 확인 👉 반환 👉 강제변환
  2. toString() 사용 가능여부 확인 👉 반환 👉 강제변환
  3. 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()사용 권장

반응형