>  기사  >  웹 프론트엔드  >  JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?

JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-02 10:58:02940검색

 When Should You Use `eval()` vs `new Function()` in JavaScript?

JavaScript에서 eval()과 new Function()을 상호 교환할 수 있나요?

JavaScript 코드가 포함된 문자열로 작업할 때 일반적으로 두 가지 함수가 발생합니다. eval() 및 새 함수(). 둘 다 문자열에 포함된 코드를 실행할 수 있지만 서로 다른 특징과 동작을 나타냅니다.

eval()과 new Function(): 주요 차이점

  • 범위: 가장 큰 차이점은 범위에 있습니다. eval()은 현재 실행 범위 내에서 코드를 평가합니다. 이는 코드가 지역 변수에 액세스할 수 있음을 의미합니다. 반면, new Function()은 새로운 범위를 생성하며 지역 변수에 직접 접근할 수 없습니다.
  • 보안: eval()은 보안 취약점으로 악명이 높습니다. 이를 통해 입력 문자열을 신뢰할 수 없는 경우 악성 코드 실행으로 이어질 수 있는 임의 코드를 평가할 수 있습니다. new Function()은 코드를 별도의 범위에서 실행되는 함수 개체로 구문 분석하므로 더 안전합니다.

코드 조각 이해

코드 조각 제공하신 내용은 eval() 및 new Function()의 다양한 동작을 보여줍니다.

<code class="javascript">var evaluate = function(string) {
    return eval('(' + string + ')');
}

var func = function(string) {
    return (new Function( 'return (' + string + ')' )());
}</code>

두 함수 모두 문자열 "2 1"을 평가하고 결과를 반환합니다. 그러나 함수에 지역 변수 "a"를 포함하도록 코드를 수정하면 eval()은 지역 변수에 액세스하고 수정할 수 있지만 new Function()은 그렇지 않습니다.

주의 사항 및 모범 사례

eval() 및 new Function()은 동적 코드를 실행하는 편리한 방법을 제공하지만 주의해서 사용해야 합니다.

  • 피하세요 eval(): eval()은 보안 위험과 성능 문제로 인해 일반적으로 권장되지 않습니다.
  • new Function()을 주의해서 사용하세요. new Function()이 eval(보다 안전합니다. ), 그러나 여전히 주입 공격에 취약할 수 있습니다.
  • 입력 삭제: 항상 eval() 또는 new Function()을 통해 실행 중인 코드가 삭제되고 신뢰할 수 있는지 확인하세요.

대부분의 경우 템플릿 리터럴이나 new가 없는 함수 생성자와 같이 동적 코드 실행을 위해 확립된 JavaScript 언어 기능을 사용하는 것이 좋습니다.

위 내용은 JavaScript에서 `eval()`과 `new Function()`을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.