본문 바로가기
JS

JS, use strict / undeclared

by Hyeon_E 2023. 10. 31.

[ use strict(엄격모드) ]

ES5부터 지원하는 use strict는

암묵적인 "느슨한 모드(Sloppy Mode)"를 해제하고 명시적인 "엄격 모드(Strict Mode)"를 사용하는 방법

 

JS의 제한된 버전을 선택함으로써 런타임시 JS 코드에 대하여 향후 버전의 ECMAScript에서 사용될 수 있는 일부 구문을 제외하는 등보다 엄격한 parsing 및 error handling을 자발적으로 시행하도록 적용함으로써 일반적인 코딩 실수나 안전하지 않은 동작을 포착함

 

strict 모드에서는 일반적인 JS의 의미에 몇가지를 변경함

  1. JS오류는 아니지만 함정이 될 어떤 일을 오류가 발생하도록 변경하여 제거
    • 코드의 문제를 더 빨리 알리고 소스로 더 빨리 안내하므로 결과적으로 디버깅이 쉬워짐
  2. JS 엔진의 최적화 처리를 어렵게 만드는 오류를 수정함
  3. 미래의 ECMAScript로 정의 될 예정 구문을 금지하여 발생 가능한 에러를 예방함

 

strict mode가 적용되는 사항(JS의 기본 동작이 변경되는 사항)

  1. 암묵적인 전역 변수 금지
    • 변수를 선언하지 않고 사용하는 것을 금지하여 전역 오염을 방지 할 수 있음
  2. 변수, 함수, 매개변수에 중복된 이름 금지
    • 중복된 이름을 가진 변수, 함수, 매개변수의 선언을 금지함
  3. 수정할 수 없는 객체에 대한 수정 금지
    • 확장 및 삭제가 금지된 객체에 대한 수정을 시도하면 오류 발생
  4. this의 값 설정
    • 함수 내에서 this의 값이 전역 객체를 참조하지 않고 undefined가 됨
  5. with문 금지
    • with문을 사용하는 것을 금지함

 

strict mode(엄격모드) 적용하기

use strict는 전체 스크립트 또는 부분함수에 적용 가능함

{ } 괄호로 묶어진 블록문에서는 적용되지 않음 즉 컨텍스트와 같은 곳에 적용을 시도하면 동작하지 않음

 

전체 스크립트에 strict mode 적용

// 전체 스크립트 엄격 모드 구문
"use strict";
var v = "Hi!  I'm a strict mode script!";

 

 

함수에 strict mode 적용

function strict() {
  // 함수-레벨 strict mode 문법
  "use strict";
  function nested() {
    return "And so am I!";
  }
  return "Hi!  I'm a strict mode function!  " + nested();
}
function notStrict() {
  return "I'm not strict.";
}

함수에 strict mode를 적용하기 위해 함수 본문 처음에 "use strict";('use strict';) 구문을 넣음

 

모듈에 strict mode 적용

function strict() {
  // 모듈이기때문에 기본적으로 엄격합니다
}
export default strict;

JS 모듈의 전체 컨텐츠는 엄격 모드 시작을 위한 구문 없이도 자동으로 엄격모드 상태임

 

strict mode의 장점

  1. 오류 감지
    • strict mode는 일부 애매한 코드의 동작을 변경하여 오류를 발생시킴
    • 이로 인해 오류를 더 빨리 감지하고 조치를 취할 수 있음
  2. 전역 변수 오염 방지
    • strict mode에서 전역 변수를 선언하고 사용하는 것을 금지함
    • 이로 인해 다른 코드에 의해 전역 변수가 무분별하게 변경되는 것을 방지할 수 있음
  3. 성능 최적화
    • strict mode에는 몇 가지 코드 최적화 기능이 내장되어 있음
    • 이로 인해 코드 실행 속도가 향상될 수 있음

 

strict mode의 단점

  1. 일부 기능 제한
    • strict mode에서는 with 문을 사용할 수 없는 등 일부 기능을 사용할 수 없음
    • 이는 기존의 코드와의 호환성 문제를 일으킬 수 있음
  2. 예전 브라우저 호환성
    • strict mode는 ECMAScript 5에서 소개된 기능이므로 예전 버전의 브라우저에서는 동작하지 않을 수 있음
    • 이는 호환성 문제를 처리해야 할 때 추가 작업을 필요로 함

 

[ undeclared ]

undeclared는 스코프 내에 변수가 선언조차 되지 않았을 때를 말함

즉 접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태를 뜻함

 

undefined vs null vs undeclared

undefined는 개발자가 의도적으로 할당한 값이 아니라 자바스크립트 엔진에 의해 초기화된 값

값이 없는 게 아니라 값이 할당된 적이 없다는 뜻

 

null의도적으로 변수에 값이 없다는 것을 명시할 때 사용

 

undeclared접근 가능한 스코프에 변수 선언조차 되어 있지 않은 상태

 

null 비교

null을 비교할때는 엄격한 비교 연산자(===)를 사용하는 것이 좋음

typeof를 사용하거나 느슨한 비교를 할경우 원하는 비교 혹은 확인 불가능

typeof null	//'object'
null == undefined	//true

null === undefined	//false

 

 

'JS' 카테고리의 다른 글

JS, charAt()  (1) 2023.11.29
null 병합 연산자 ??  (1) 2023.11.12
JS, 소수점 오류  (0) 2023.10.21
JS, BigInt  (1) 2023.10.19
JS, 모든 문자열 치환(replace, replaceAll)  (1) 2023.10.17

댓글