[function] eval()

킹뎡·2022년 10월 16일

eval(string)은 문자열로 된 계산식을 실행시켜주는 함수이다.

console.log(eval('2 + 2')) // 4
값이 없을 시에는 undefind를 반환합니다,,,

eval() 쓰지마세요!!!

eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수이다. 악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면, 당신의 웹페이지나 확장 프로그램의 권한으로 사용자의 기기에서 악의적인 코드를 수행하는 결과를 초래할 수 있다. 또한, 제3자 코드가 eval()이 호출된 위치의 스코프를 볼 수 있으며, 이를 이용해 비슷한 함수인 Function으로는 실현할 수 없는 공격이 가능해진다.

또한 최신 JS 엔진에서 여러 코드 구조를 최적화하는 것과 달리 eval()은 JS 인터프리터를 사용해야 하기 때문에 다른 대안들보다 느리다.

추가로, 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환한다. 즉, 변수명의 개념이 완전히 없어진다. 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 한다. 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어날 수 있으며, 브라우저는 이에 대응하기 위해 기계 코드를 재작성해야 한다. (그러나, 다행히도 window.Function이라는 eval보다 훨씬 나은 대안이 있다.)

출처 :MDN eval을 절대 사용하지 말 것!

profile
무럭무럭 자라기

0개의 댓글