일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 시청역놀곳
- 스프링부트
- springboot
- 유에이치스위트서울스퀘어
- MySQL
- MAC
- cachedbodyhttpservletrequest
- 권한별메뉴만들기
- 오리지널팬케이스하우스
- csv업로드
- jue
- 재귀구문
- 디너요리추천
- 한남동중식
- 500에러관리
- 데이터베이스
- csv다운로드
- 시청역숙소
- 컬럼타입변경
- 유에이치스위트
- menu만들기
- 신사동이자카야
- 바디캐싱
- 판교테크원타워맛집
- 데이터업로드
- 400에러관리
- 사용자별메뉴
- xcrunerror
- httpcode
- 오리지널팬케이스하우스 판교점
- Today
- Total
IT모저모
[JavaScript] eval 이란 함수 본문
안녕하시렵니까?
오늘은 eval 함수에 대해 알아보겠습니다.
정의
문자로 표현된 JavaScript 코드를 실행하는 함수 입니다.
eval(String)
매개변수는 string이고 return값은 얻은 값 그대로, 없다면 undefined를 반환합니다.
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
설명
eval()은 global한 함수 속성이고 인자는 문자열입니다.
하지만 연산을 하기위해서는 eval()을 호출하지 않아도 됩니다. 자바스크립트가 알아서 연산을 해주기 때문입죠?
하지만 이는 절대 사용하지 말 것!
val()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수입니다.
악의적인 영향을 받았을 수 있는 문자열을 eval()로 실행한다면,
당신의 웹페이지나 확장 프로그램의 권한으로 사용자의 기기에서 악의적인 코드를 수행하는 결과를 초래할 수 있습니다. 또한, 제3자 코드가 eval()이 호출된 위치의 스코프를 볼 수 있으며, 이를 이용해 비슷한 함수인 Function으로는 실현할 수 없는 공격이 가능합니다.
또한 최신 JS 엔진에서 여러 코드 구조를 최적화하는 것과 달리 eval()은 JS 인터프리터를 사용해야 하기 때문에 다른 대안들보다 느립니다.
추가로, 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환합니다. 즉, 변수명의 개념이 완전히 없어집니다. 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 합니다. 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어날 수 있으며, 브라우저는 이에 대응하기 위해 기계 코드를 재작성해야 합니다. 그러나, (다행히) window.Function이라는 eval보다 훨씬 나은 대안이 있습니다. eval()을 사용하는 코드를 Function()으로 바꾸는 방법에 대해서는 아래를 참조하세요.
참조: https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/eval
'Develop > SpringBoot' 카테고리의 다른 글
[JSP] File Upload/Download 구현하기 (0) | 2023.05.23 |
---|---|
[JavaScript] 프로그래머스 - 코딩테스트 준비(1) | 달리기 경주 (0) | 2023.05.03 |
[HTML] 정규식 패턴 (0) | 2023.04.13 |
[JavaScript] Object(객체)에서 원하는 key, value 얻기 (0) | 2023.04.13 |
[JavaScript] jQuery 이벤트 동적 처리하기 (0) | 2023.04.12 |