JS 튜토리얼

제이에스 홈 JS 소개 JS 어디로 JS 출력 JS 문 JS 구문 JS 코멘트 JS 변수 제이에스렛 JS 상수 JS 연산자 JS 산술 JS 할당 JS 데이터 유형 JS 함수 JS 객체 JS 이벤트 JS 문자열 JS 문자열 메서드 JS 문자열 검색 JS 문자열 템플릿 JS 번호 JS 숫자 메서드 JS 배열 JS 배열 메서드 JS 배열 정렬 JS 배열 반복 JS 배열 상수 JS 날짜 JS 날짜 형식 JS 날짜 가져오기 메서드 JS 날짜 설정 방법 JS 수학 JS 랜덤 JS 부울 JS 비교 JS 조건 JS 스위치 JS 루프 In에 대한 JS 루프 의 JS 루프 JS 루프 동안 JS 브레이크 JS 이터러블 JS 세트 JS 맵 JS 유형 JS 유형 변환 JS 비트와이즈 JS 정규 표현식 JS 오류 JS 범위 JS 호이스팅 JS 엄격 모드 JS 이 키워드 JS 화살표 함수 JS 클래스 JS JSON JS 디버깅 JS 스타일 가이드 JS 모범 사례 JS 실수 JS 성능 JS 예약어

JS 버전

JS 버전 JS 2009(ES5) JS 2015(ES6) JS 2016 JS 2017 JS 2018 JS IE / 엣지 JS 연혁

JS 객체

객체 정의 개체 속성 개체 메서드 개체 표시 개체 접근자 객체 생성자 개체 프로토타입 객체 반복 가능 객체 세트 객체 맵 개체 참조

JS 함수

기능 정의 기능 매개변수 함수 호출 함수 호출 기능 적용 함수 클로저

JS 클래스

수업 소개 클래스 상속 클래스 정적

JS 비동기

JS 콜백 JS 비동기 JS 약속 JS 비동기/대기

JS HTML DOM

DOM 소개 DOM 메서드 DOM 문서 DOM 요소 DOM HTML DOM 양식 DOM CSS DOM 애니메이션 DOM 이벤트 DOM 이벤트 리스너 DOM 탐색 DOM 노드 DOM 컬렉션 DOM 노드 목록

JS 브라우저 BOM

JS 창 JS 화면 JS 위치 JS 연혁 JS 네비게이터 JS 팝업 경고 JS 타이밍 JS 쿠키

JS 웹 API

웹 API 소개 웹 양식 API 웹 기록 API 웹 스토리지 API 웹 작업자 API 웹 가져오기 API 웹 지리적 위치 API

JS 아약스

AJAX 소개 AJAX XMLHttp AJAX 요청 AJAX 응답 AJAX XML 파일 AJAX PHP AJAX ASP AJAX 데이터베이스 AJAX 애플리케이션 AJAX 예제

JS JSON

JSON 소개 JSON 구문 JSON 대 XML JSON 데이터 유형 JSON 구문 분석 JSON 문자열화 JSON 객체 JSON 배열 JSON 서버 JSON PHP JSON HTML JSON JSONP

JS 대 jQuery

jQuery 선택기 제이쿼리 HTML 제이쿼리 CSS 제이쿼리 DOM

JS 그래픽

JS 그래픽 JS 캔버스 JS 플로틀리 JS 차트.js JS 구글 차트 JS D3.js

JS 예제

JS 예제 JS HTML DOM JS HTML 입력 JS HTML 객체 JS HTML 이벤트 JS 브라우저 JS 편집기 JS 연습 JS 퀴즈 JS 인증서

JS 참조

자바스크립트 객체 HTML DOM 객체


JavaScript 사용 엄격


"use strict"; JavaScript 코드가 "엄격한 모드"에서 실행되어야 함을 정의합니다.


"엄격한 사용" 지침

"use strict"지시문은 ECMAScript 버전 5에서 새로 추가되었습니다.

이것은 문이 아니라 이전 버전의 JavaScript에서 무시되는 리터럴 표현식입니다.

의 목적은 "use strict"코드가 "엄격한 모드"에서 실행되어야 함을 나타내는 것입니다.

엄격 모드에서는 예를 들어 선언되지 않은 변수를 사용할 수 없습니다.

모든 최신 브라우저는 Internet Explorer 9 이하를 제외한 "엄격한 사용"을 지원합니다.

Directive
"use strict" 13.0 10.0 4.0 6.0 12.1

표의 숫자는 지시문을 완전히 지원하는 첫 번째 브라우저 버전을 지정합니다.

모든 프로그램에서 엄격 모드를 사용할 수 있습니다. 선언되지 않은 변수를 사용하지 못하도록 하는 것과 같이 보다 깔끔한 코드를 작성하는 데 도움이 됩니다.

"use strict" 는 문자열일 뿐이므로 IE 9는 이해하지 못하더라도 오류를 발생시키지 않습니다.


엄격 모드 선언

엄격한 모드는 "use strict" 를 추가하여 선언됩니다 . 스크립트나 함수의 시작 부분에

스크립트 시작 부분에 선언되며 전역 범위를 갖습니다(스크립트의 모든 코드는 엄격 모드에서 실행됨).

예시

"use strict";
x = 3.14;       // This will cause an error because x is not declared

예시

"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will also cause an error because y is not declared
}

함수 내에서 선언되고 로컬 범위가 있습니다(함수 내부의 코드만 엄격 모드에 있음).

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;   // This will cause an error
}


"엄격한 사용"; 통사론

엄격 모드를 선언하기 위한 구문은 이전 버전의 JavaScript와 호환되도록 설계되었습니다.

JavaScript 프로그램에서 숫자 리터럴(4 + 5;) 또는 문자열 리터럴("John Doe";)을 컴파일하면 부작용이 없습니다. 단순히 존재하지 않는 변수로 컴파일되고 죽습니다.

따라서 "use strict";의미를 "이해하는" 새로운 컴파일러에게만 중요합니다.


왜 엄격한 모드인가?

엄격 모드를 사용하면 "보안" JavaScript를 더 쉽게 작성할 수 있습니다.

엄격 모드는 이전에 허용된 "잘못된 구문"을 실제 오류로 변경합니다.

예를 들어, 일반 JavaScript에서 변수 이름을 잘못 입력하면 새 전역 변수가 생성됩니다. 엄격 모드에서는 오류가 발생하여 실수로 전역 변수를 생성할 수 없습니다.

일반 JavaScript에서 개발자는 쓰기 불가능한 속성에 값을 할당하는 오류 피드백을 받지 않습니다.

엄격 모드에서 쓰기 불가능 속성, getter 전용 속성, 존재하지 않는 속성, 존재하지 않는 변수 또는 존재하지 않는 객체에 대한 할당은 오류를 발생시킵니다.


엄격 모드에서는 허용되지 않음

선언하지 않고 변수를 사용하는 것은 허용되지 않습니다.

"use strict";
x = 3.14;                // This will cause an error

객체도 변수입니다.

선언하지 않고 객체를 사용하는 것은 허용되지 않습니다.

"use strict";
x = {p1:10, p2:20};      // This will cause an error

변수(또는 개체) 삭제는 허용되지 않습니다.

"use strict";
let x = 3.14;
delete x;                // This will cause an error

기능 삭제는 허용되지 않습니다.

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

매개변수 이름 복제는 허용되지 않습니다.

"use strict";
function x(p1, p1) {};   // This will cause an error

8진수 숫자 리터럴은 허용되지 않습니다.

"use strict";
let x = 010;             // This will cause an error

8진 이스케이프 문자는 허용되지 않습니다.

"use strict";
let x = "\010";            // This will cause an error

읽기 전용 속성에 대한 쓰기는 허용되지 않습니다.

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

obj.x = 3.14;            // This will cause an error

get-only 속성에 대한 쓰기는 허용되지 않습니다.

"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

삭제할 수 없는 속성은 삭제할 수 없습니다.

"use strict";
delete Object.prototype; // This will cause an error

단어 eval는 변수로 사용할 수 없습니다.

"use strict";
let eval = 3.14;         // This will cause an error

단어 arguments는 변수로 사용할 수 없습니다.

"use strict";
let arguments = 3.14;    // This will cause an error

다음 with문장은 허용되지 않습니다.

"use strict";
with (Math){x = cos(2)}; // This will cause an error

보안상의 이유로 eval()은(는) 호출된 범위에서 변수를 생성할 수 없습니다.

"use strict";
eval ("let x = 2");
alert (x);             // This will cause an error

함수 의 this키워드는 엄격 모드에서 다르게 작동합니다.

this키워드는 함수를 호출한 개체를 나타냅니다 .

객체가 지정되지 않은 경우 엄격 모드의 undefined함수는 반환되고 일반 모드의 함수는 전역 객체(창)를 반환합니다.

"use strict";
function myFunction() {
  alert(this); // will alert "undefined"
}
myFunction();


미래의 증거!

향후 JavaScript 버전용으로 예약된 키워드는 엄격 모드에서 변수 이름으로 사용할 수 없습니다.

이것들은:

  • 도구
  • 상호 작용
  • 허락하다
  • 패키지
  • 사적인
  • 보호받는
  • 공공의
  • 공전
  • 생산하다
"use strict";
let public = 1500;      // This will cause an error

조심해!

"use strict" 지시어는 스크립트나 함수 의 시작 부분 에서만 인식됩니다 .