카테고리 없음

'eval' vs 'new Function'

숲별 2023. 6. 9. 14:26
728x90

지금 근무하는 곳은 예스러운 코드들이 많이 남아있다.ㅎㅎ

 

그 중 몇 가지는 바꾸는 부분들도 있는데

 

신기하기도 하고 차이점 찾아보는 재미도 있다.

 

그동안 차이점들을 찾아볼 때는 그냥 과거에는 그랬구나 역사책 보는 느낌이었다면

지금은 변화하는 그 시대에 직접 던져져있는 기분이라고 해야하나..

 


 

반복되는 구문을 for문으로 바꾸려고 aArr를 만들어서 바뀌는 부분만 담았는데

문자열 반환된 값을 객체로 바꿔야했다.

이를 해결하기 위해서 이전에는 eval함수를 사용했다고 한다.

정의

  • 문자로 표현 된 JavaScript 코드를 실행하는 함수
eval(string)
  • 매개변수
    • string : 자바스크립트 표현식, 명령문, 또는 연속되는 다수의 명령문을 나타내는 문자열. 표현식은 이미 존재하는 객체의 변수나 속성을 포함할 수 있음
  • 반환값
    • 주어진 코드를 평가(evaluate)하여 얻은 값. 값이 없다면 undefined를 반환합니다.

 

eval로 작성시(사내코드라 간략하게 바꿔서 기록)

for(var i = 0; i < aArr.length; i++){
	eval(aArr[i].num).setValue(bArr.length);
    if(bArr.length==0){
    	eval(aArr[i].grp).hide();
    }
}

 

 

지금은 보안 문제("eval is evil")로 new Function으로 바꿔서 (eval의 대체)

for(var i = 0; i < aArr.length; i++){
	new Function("return " + aArr[i].num)().setValue(bArr.length);
    if(bArr.length==0){
    	new Function("return " + aArr[i].grp)().hide();
    }
}

 

https://velog.io/@minukbak/904

 

[JavaScript]eval()이란, 그리고 이를 대체할 new Function()

eval()에는 여러 보안 이슈가 있기 때문에 대신 new function() 를 사용하는 것을 매우 권장한다.

velog.io

https://logical-code.tistory.com/102

 

eval() 과 new Function()

eval() 과 new Function()eval()eval 함수는 String 형태의 소스 코드를 매개변수로, 해당 스크립트를 동적으로 실행시킬 수 있다. String 매개변수는 Javascript 파서에 의해 분석되고 실행된다. 하지만, 특별한

logical-code.tistory.com