앙큼한 개발기록

[Error] An object could not be cloned 오류 본문

개발/javascript

[Error] An object could not be cloned 오류

angkeum 2022. 12. 15. 22:03

javascript 에서 Object를 복사하는 방법은 여러가지가 있다. 

 

1. lodash

2. json

3. separator

...

 

위에 언급한거 외에도 다른 라이브러리를 사용해도 된다. 

object를 복사해서 사용하는 이유는 Object 가 참조 하고 있는 주소 값때문에 

단순하게 let이나 var로 선언해서 사용할 경우 해당 참조값 모두가 바뀔수 있기 때문에 

동일한 데이터를 가지고 가공해서 사용하고 싶을 때 많이 사용 된다. 

 

나는 위에 중에서 json 방식을 공통 함수로 만들어서 사용 하고 있다. 

내가 사용한 함수는 다음과 같다. 

cloneObject(value) {
    return JSON.parse(JSON.stringify(value))
}

 

심플하고, 라이브러리 안써도 되고, 함수로 써서 알기 쉽고 등등 여러가지 장점이 있다. 

근데 문제는 json.stringify 가 되지 않는 object들이 존재한다. 

object 안에 함수가 들어가 있거나, Class type Object 이거나 javascript의 기본 타입 형이 아닌 경우 (ex. Promise)

 

나 같은 경우 비동기 함수에서 전달받은 데이터를 복사해 가공하여 화면에 뿌려주기 위해 Object를 복사해서 사용했는데 

async/await 에서 await을 걸지 않아서 promise 객체를 전달 받아 에러가 터졌다. 

 

이 에러가 무서운게 어디서 터졌는지 찾기가 참 애매 하다는 건데 

실행중에 에러가 발생했다면 unit test 를 꼭 해보길 바란다. 

 

끝.

Comments