JSON.stringify 함수는 입력받은 값을 JSON 형식으로 변환한다. undefind와 fubction은 JSON으로 생략되거나 null로 변환된다.
JSON.stringify()는 다음과 같이 작동한다
JSON.stringify()의 기능을 stringifyJSON() 함수로 직접 구현하였다.
입력값으로 배열과 객체가 입력 받을 수 있고 배열과 객체의 각 요소에 대해 함수를 적용해주어야 하기 때문에 재귀로 구현할 수 있다.
if(typeof obj === 'function' || typeof obj === 'undefined'){
return undefined;
}
if(typeof obj === 'string'){
return '\"' + obj + '\"';
}
return String(obj);
/*
실제 코드에서는 가장 마지막에 작성(배열, 객체, 문자열의 모든 조건에 만족안되는 경우에 실행)
null의 type은 object이기 때문에 객체와 따로 구분해줘야함.
*/
if(Array.isArray(obj)){
let temp = [];
}
if(obj.length === 0){
return '[]';
}
else{
for(let i = 0; i < obj.length; i++){
push(stringifyJSON(obj[i]));
}
}
return '[' + String(temp) + ']'
if(typeof obj === 'object' && obj !== null){ //null은 object타입이라서 예외처리
let str = '';
}
if(Object.keys(obj).length === 0){ // 객체의 길이
return '{}'
}
else{
for(let prop in obj){
if(typeof obj[prop]=='function' || obj[prop] === undefined){
return '{}';
}
let p = stringifyJSON(prop);
obj[prop] = stringifyJSON(obj[prop]);
str += p+':'+obj[prop];
str +=',';
}
str=str.slice(0,-1);
return '{'+str+'}';
function stringifyJSON(obj) { if(typeof obj === 'function' || typeof obj == 'undefined'){ return undefined; } if(Array.isArray(obj)){ let temp = []; if(obj.length === 0){ return '[]'; } else{ for(let i = 0; i < obj.length; i++){ temp.push(stringifyJSON(obj[i])); } } return '[' + String(temp) + ']'; } else if(typeof obj === 'object' && obj !== null){ let str =''; if(Object.keys(obj).length === 0){ return '{}'; }else{ for(let prop in obj){ if(typeof obj[prop]=='function' || obj[prop] === undefined){ return '{}'; } let p = stringifyJSON(prop); obj[prop] = stringifyJSON(obj[prop]); str += p+':'+obj[prop]; str +=','; } str=str.slice(0,-1); return '{'+str+'}'; } } else if(typeof obj === 'string'){ return '\"' + obj + '\"'; } return String(obj); }