ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • javascript에서 문자열을 변수명으로 바꾸기
    개발/코딩관련 2019. 12. 13. 14:12
    반응형

    1. 문자열 -> 변수명으로? eval!

    placeMakerClick : function(data_id) {
        ...
        this.viewer.setPanorama( this......data_id) );
        ...
    },

    위와같은 스크립트에 data_id는 문자열로 넘어오는데 앞에 this.라는 코드를 붙여서 코드로 실행하고 싶었다.

    this.viewer.setPanorama( this.dataId) ); 이거와 같이.

    찾다보니 eval()이라는 함수를 찾았다.

    placeMakerClick : function(data_id) {
        ...
        this.viewer.setPanorama( eval('this.' + data_id)) );
        ...
    },

    이렇게 하면 내가 원하는데로 작동된다. 그런데 문제가 있다. eval()함수는 사장되는 분위기이며, 여러 문제가 있는 함수였다.

    가장큰건 성능문제와 보안문제.

    다른방법은 없을까?

    2. eval대신 new Function!

    찾아보니 new Function을 이용해 eval()을 대체할 수 있다고 한다.

    eval보다 대략적으로 아무리 못해도 10배 정도 차이가 난다고 한다. (어느 사이트는 50배 이상 차이가 난다고 한다.)

    보안문제도 없다.

    하지만 나는 new Function 범위 밖에 있는 변수를 사용해야하므로 나에겐 맞지 않는 방법이다.

    eval()은 밖에 있는 변수를 쓰던데로 쓸 수 있지만, new Function (~)은 안에 선언한 것에만 접근할 수 있어서 맞지 않는다.

    3. 결론

    일단 보안문제는 내 소스에선 큰 문제는 없어보였다. 변수명을 누구나봐도 상관없는 데이터며, 변수명을 수정하더라고 상관없었다.

    그렇다면 성능문제가 가장 크게 남는다.

    일단 eval()로 유지해보고 안될것 같으면 스크립트상에서 if else 문에 넘어오는 데이터가 내가 원하는 문자열과 같은지 판단해서 각각 setPanorama를 따로 해주는 방법이 남는다.

    panorama가 많아지면 소스코드도 길어지고 반복되는 코드가 많고, 유지보수가 용이하지 않아 eval을 쓴것이다. 그런데 eval이 문제가 많다고 판단되면 if else문으로 바꿔야 할 것이다.

     

     

     

    반응형

    '개발 > 코딩관련' 카테고리의 다른 글

    수직 가운데 정렬  (0) 2020.02.20
    크롬 전체화면  (0) 2020.01.23
    개발하면서 궁금한점들...  (0) 2019.10.15
    preventDefault vs stopPropagation 차이  (0) 2019.03.11
    톰캣 구동시 에러  (0) 2019.02.22

    댓글

Designed by Tistory.