엄격모드 use strict

셀라문·2022년 3월 3일
0

JavaScript

목록 보기
18/27

위치

스크립트나 함수 시작 부분에 위 지시어 추가.

  • 스크립트 시작에 추가되면 전역범위에 영향 미침.
  • 함수 안에 추가되면 함수 안 (= 로컬)에서만 미침.

특징

  • ECMAScript 5 버전에서 추가됨. 이전 JS 버전에서는 무시됨.
  • 구문이 아니라 엄격모드로 실행되야 함을 알리는 지시어 (= 단순한 문자적 표현)일 뿐임.
  • F12 키 개발자모드에서 에러 내용 확인 가능.
  • 모든 프로그램에서 엄격모드 사용 가능하며, 깔끔한 코딩에 도움됨.
    즉, 엄격모드는 이전에 허용 된 "잘못된 구문"을 실제 오류로 변경.
  • 엄격 모드에서는 아래 경우에 에러 발생함.
    ・쓰기 권한 없는 속성에 속성값 쓰기,
    ・존재하지 않는 속성 사용,
    ・존재하지 않는 변수 사용,
    ・존재하지 않는 객체 사용.

예제

Use Strict 예제

<script>

"use strict"; // 엄격모드 전역범위 미침.

x = 3.14;  // 에러 유발 (∵ 변수 선언 안 됨.)

</script>
<script>

"use strict"; // 엄격모드 전역범위 미침.

homzzang();



function homzzang() {

  y = 3.14;   // 에러 유발 (∵ 변수 선언 안 됨)

}

</script>
<script>

x = 3.14;    // 에러 유발 안 함.

homzzang();



function homzzang () {

  "use strict"; // 엄격모드 함수 안에서만 유효.

  y = 3.14;  // 에러 유발. (∵ 변수 선언 안됨)

}

</script>

use Strict 사용 시 에러발생 경우

에러1 - 선언 안 된 변수 사용

<script>

"use strict";

x = 100;  // 에러 유발

</script>

에러2 - 선언 안 된 객체 사용

<script>

"use strict";

x = {a:10, b:20};  // 에러 유발

</script>

에러3 - 변수삭제 / 객체삭제

<script>

"use strict";

var x = 100;

delete x;  // 에러 유발 

</script> 

에러4 - 함수삭제

<script>

"use strict";

function x(a, b) {}; 

delete x;  // 에러 유발

</script>

에러5 - 매개변수명 중복

<script>

"use strict";

function x(a, a) {};  // 에러 유발

</script>

에러6 - 8진수 변수값 사용

<script>

"use strict";

var x = 010;   // 에러 유발

</script>

에러7 - 8진수 회피 문자

<script>

"use strict";

var x = "\010";   // 에러 유발.

</script>

에러8 - 읽기전용속성에 쓰기

<script>

"use strict";

var obj = {};

Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;   // 에러 유발

</script> 

에러9 - get전용속성에 쓰기

<script>

"use strict";

var obj = {get x() {return 0} };

obj.x = 3.14;   // 에러 유발

</script>

에러10 - 삭제불가속성 삭제 시도.

<script>

"use strict";

delete Object.prototype;   // 에러 유발

</script> 

에러11 - 변수명으로 단어 eval 사용.

<script>

"use strict";

var eval = 100;   // 에러 유발

</script>

에러12 - 변수명으로 단어 arguments 사용.

<script>

"use strict";

var arguments = 100;   // 에러 유발

</script>

에러13 - with 구문 사용

<script>

"use strict";

with (Math){x = cos(2)};   // 에러 유발

</script> 

에러14 - 변수 호출 범위 안에서 eval()로 변수생성.

<script>

"use strict";

eval ("var x = 2");

alert (x); // 에러 유발

</script>

※ 보안 상 이유로, 변수 호출 범위에서는 eval()의 변수 생성 금지.

에러15 - 함수에서 객체 정의 안 된 this 키워드 사용.

<script>

"use strict";

function homzzang() {

 alert(this); // undefined 경고창 뜸.

}

homzznag();

</script>

에러16 - 미래 JS 버전 예약 키워드 이용한 변수 생성

<script>

"use strict";

var public = 100;   // 에러 유발 

</script>
profile
취미로 하는 공부기록장

0개의 댓글