Frudy
6k
2019-12-25 20:59:17
3
1001

자바스크립트 오늘 겪은 에로사항이에요.


Server에 객체를 전송해야 할일도 있고,

Router에 queryString으로 넣을 때 객체로 넣을 수도 있고 해서.. 이런걸 만들어봤어요.


export function withoutEmptyString(value: string): boolean {

return value === "";
}

export function withoutZero(value: string | number): boolean {

return value === "0" || value === 0;
}


export function propertyDelete(object: object, ...removeModes: Array<Function>): object {

let clone = {...object};

Object.keys(clone).forEach( property => {

// @ts-ignore
let value = clone[property];

let needDelete = removeModes.some( removeMode => removeMode(value) );

if(needDelete) {

// @ts-ignore
delete clone[property];
}
});

return clone;
}


목적은 간단해요

객체 프로퍼티 순회하면서 지우고싶은 프로퍼티가 있으면 지워서 객체를 반환하려고 했어요.


지우고싶은 조건은 콜백함수로 만들어서 확장성을 고려한것 까지는 좋았으나..

과정에서 겪은 버그가 좀 있었어요.


(1) ==는 정말 지양해야 되겠더라구요.


0, "0" 둘 다 해당되려고

function에 return value == 0 했었는데


세상에 false == 0도 true로 되더라구요, 이건 몰랐어요.

그래서 false값이 저장된 프로퍼티도 다같이 지워지는 일이 발생했어요.


그래서 확실하게 return value === "0" || value === 0;

이렇게 고쳤어요...



(2) 매개변수를 건들지않기위해, 얕은 복사를 해야했어요.


propertyDelete(obj, withoutEmptyString);으로 호출하는 개발자의 의도를 생각해본다면,

매개로 넘어온 obj의 프로퍼티를 지우는게 아니라,

매개로 넘어온 obj를 복사한다음, 복사본에서 프로퍼티를 지우고 복사본을 반환하는게,


호출하는 개발자한테 직관적이더라구요. 

제가만들고 제가 햇갈려서 잘못사용하여 버그를 냈습니다.


기타.. 중간에 {... 전개구문을 많이 이용한 이유도..

매개로 넘어온 객체 자체를 건들지 않으려고 했었어요.

0
  • 댓글 3

  • 웃어라포도
    2019-12-25 22:37:05


  • Frudy
    6k
    2019-12-26 05:30:24

    어ㅋㅋㅋ 저방석 사고싶어요...ㅋㅋㅋ

  • 607
    43
    2019-12-26 17:23:05

    헉 지나가다 보고 너무 탐나네요... 저 방석 저도 가지고 싶어요ㅠ

  • 로그인을 하시면 댓글을 등록할 수 있습니다.