프로그래머스를 풀던 와중 문자열로된 식을 계산하는 문제가 있었다.
아래 문제와 같이 eval()
함수를 사용하여 풀었는데,
const binomial = "40000 * 40000";
function solution(binomial) {
return eval(binomial);
}
console.log(solution(binomial));
eval함수에 대해서 자세히 알아보려고 구글링을 하였는데,
사용하면 안된다는 글을 보아서 정리했다.
eval() is evil이라는 말인데, 정리해보려 한다.
eval(string)
console.log(eval('2 + 2'));
// expected output: 4
console.log(eval(new String('2 + 2')));
// expected output: 2 + 2
console.log(eval('2 + 2') === eval('4'));
// expected output: true
console.log(eval('2 + 2') === eval(new String('2 + 2')));
// expected output: false
function test() {
var x = 2, y = 4;
console.log(eval('x + y')); // 직접 호출, 지역 범위 사용, 결과값은 6
var geval = eval; // ---------- eval을 전역 범위로 호출하는 것과 같음
console.log(geval('x + y')); // 간접 호출, 전역 범위 사용, `x`가 정의되지 않았으므로 ReferenceError 발생
(0, eval)('x + y'); // -------- 다른 방식으로 간접 호출
}