카테고리 없음
'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
https://logical-code.tistory.com/102