업무 배정 전에 기존 소스를 분석하는 시간을 가지는데 js 상단에 use strict 선언이 있었다.
처음에 1도 이해못하고 js에 이렇게 선언했는데 왜 오류를 안뱉지 하고 찾아보다가
strict 모드를 알게되었다.
1. use strict 가 뭐야?
- strict 의 정의를 보면 '엄격한'이라는 뜻을 내포하고 있기때문에 쉽게 말하면 기존 자바스크립트보다 엄격하게 관리하겠다 하는 모드로써 기존에는 오류를 뱉지 않았던 예외처리등도 규칙에 따라 오류를 보여준다.
- ES6에서는 default로 strict모드를 사용함.
2. 사용법
: 원하는 곳에 "use strict"; (또는 'use strict';) 를 선언
1] 함수내 선언 : 해당 함수블록만 strict 를 적용할 수 있음
function strict() {
// 함수-레벨 strict mode 문법
'use strict';
// 함수에 들어갈 내용
}
2] 전체 선언 : 최상단에 선언하여, 해당 파일 전체에 strict를 적용할 수 있음
'use strict';
....
function strict() {
// 함수에 들어갈 내용
}
>> 함수내 선언보다는 전체선언을 주로 쓰는 편
3. 장점
1] '보안' 자바스크립트를 이용할수 있다.
- 기존 무시되던 에러들을 오류로 보여줌으로써 소스의 문제를 줄여줌
- 그에따라 디버깅이 쉬우며 보안적인 이슈발생을 줄여줌
2] 최적화 작업을 어렵게 하는 부분들을 바로잡게 도와줌으로써 속도가 향상될 수 있음.
3] 발생가능할 에러들을 예방한다.
4. strict 모드 에서 뱉는 오류상황(기존에 무시되던 오류 등)
1] global 변수 생성 불가
- 기존 자바스크립트에서 변수를 잘못 입력하면 전역 객체에 대한 새 속성이 만들어지면서 동작을 함.
- strict 모드에서는 global변수를 생성하는 할당은 오류를 발생.
"use strict";
let mist;
mistype = 'wrongName'; // ReferenceError: mistype is not defined
2] 일반코드에서 가능했던 할당에 대한 오류생성
[ strict 모드 사용불가 예약어 ]
* implements
* interface
* let
* package
* private
* protected
* public
* static
* yield
// 쓸 수 없는 프로퍼티에 할당
"use strict";
var obj1 = {};
Object.defineProperty(obj1, "x", { value: 42, writable: false });
obj1.x = 9; //TypeError: Cannot assign to read only property 'x' of object '#<Object>'
// return 값이 있는[getter-only] 함수에 값을 할당
"use strict";
var obj2 = { get x() { return 17; } };
obj2.x = 5; //TypeError: Cannot set property x of #<Object> which has only a getter
// 확장불가 객체에 새 프로퍼티 할당
"use strict";
var fixed = {};
Object.preventExtensions(fixed); // 새로운 속성이 객체에 추가되는것을 방지하는 함수 (확장불가)
fixed.newProp = "ohai"; //TypeError: Cannot add property newProp, object is not extensible
// 삭제할수 없는 프로퍼티를 삭제하려고 할때
"use strict";
delete Object.prototype; //TypeError: Cannot delete property 'prototype' of function Object() { [native code] }
// 객체 내 모든 프로퍼티 이름이 유니크하지 않을때(속성중복)
"use strict";
var o = { p: 1, p: 2 }; //속성중복
// 함수파라미터 중복방지
1. strict 모드 : 상단 중복선언부에서 에러발생
"use strict";
function sum(a, a, c){ // SyntaxError: Duplicate parameter name not allowed in this context
return a + b + c;
}
2. 일반모드 : 하단 변수 미선언 에러발생
function sum(a, a, c){ // 숨김처리되어, 해당 위치에서는 오류나지 않음
return a + b + c ;
}
// 8진수 구문 금지
- 8진수 문법은 잘못될 사용 가능성이 높음으로 strict 모드에서는 에러를 발생함.
---여기서부터는 내가 이해한것보다 더 자세하게 설명해준 블로그들을 발견하여 걸어둔다.
(언제나 처럼 블로거님들께 감사드린다.)
// with 함수 사용불가
* with 함수 사용하지 말아야하는 이유
https://unikys.tistory.com/304
[Javascript] with 명령에 대하여
* 전문가들이 자바스크립트에 있지만 없는듯이 살라는 명령어가 2가지가 있다. eval with : eval은 보안상, 퍼포먼스상 문제가 있기 때문에 반드시 필요한것이 아니라면 사용하지 말라고 하는 것은
unikys.tistory.com
// eval 함수 외부에 선언된 변수는 사용불가(기본기능은 사용가능함..)
* eval() = evil , 사용하지 말아야하는 이유
https://velog.io/@modolee/javascript-eval-is-evil
JavaScript - eval 함수란 무엇이고, 왜 사용하지 말라고 하는가? (eval() is evil)
JavaScript의 eval 함수가 무엇이고, 왜 사용하지 말라고 하는지에 대한 정리해 보았습니다.
velog.io
//함수의 프로퍼티인 arguments, caller, callee에 접근 불가 사용불가
https://kohlee.tistory.com/entry/%ED%95%A8%EC%88%98-Function-arguments-%EA%B0%9D%EC%B2%B4
함수 (Function) - arguments 객체
Javascript의 모든 함수 스코프에는 arguments라는 특별한 변수가 있습니다. 이 변수는 함수에 넘겨진 모든 인자에 대한 정보가 담겨있습니다. arguments 객체는 Array가 아닙니다. 물론 length 프로미터도
kohlee.tistory.com
+ 참조 및 정보 출처 ( 더자세한 설명이 필요하다면 방문추천!)
https://uwostudy.tistory.com/55
자바스크립트에서 use strict 란?
최근에 나오는 라이브러리를 보면 ```"use strict"``` 라는 문구가 자주 보입니다. strict 미국·영국 [strɪkt] 1. (규칙 등이) 엄격한 2. (사람이 남에 대해) 엄격한 3. (사람이 자신의 종교・신념 등에 대해
uwostudy.tistory.com
https://m.blog.naver.com/on21life/221654555798
자바스크립트 - javascript에서 "use strict" 란 무엇인가
유연한 JS 검증체계를 딱딱하게 strict mode ES5부터 지원하는 "use strict"는 암묵적인 &qu...
blog.naver.com
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Strict_mode
Strict mode - JavaScript | MDN
엄격 모드는 평범한 JavaScript 시멘틱스에 몇가지 변경이 일어나게 합니다.
developer.mozilla.org
https://www.w3schools.com/js/js_strict.asp
JavaScript "use strict"
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
[JavaScript] 엄격 모드 strict mode
띠용
noritersand.github.io
ES6 이후의 변경점 총정리
Javascript ES6 이후에 어떤 새로운 것들이 등장했는지 쭉 훑어보는 글입니다.
polarb-raf.dev
++ 사담
아니.. 그동안 자바스크립트 쓰면은 그렇게 오류를 안뱉는다고 막되먹은 언어취급을 했는데 말이야..
이렇게 쉽게 오류를 뱉어주는 모드를 사용할수있었단 말인가..
그동안 나는 뭐했던가
머리가 나쁘면 손발이 고생한다더니 그동안 고생이 머리속에서 쫘아악 스쳐지나가면서
괴로워하는 와중에 같이 일하는 대리님이 대부분 개발자가 ES5 --> ES6 로 잘 쓰진 않는다고(호환성때문에/몰라서/어려워서/기타..)
지금이라도 알아서 재밌지 않냐고 했다.
(물론 내 주변환경만 그럴수있다... 새로 배우는걸 게을리 하지말자는 마음가짐을 다시 얻게됨)
'JAVASCRIPT' 카테고리의 다른 글
ES6 : 편한 arrow function 안에서도 쓰지 못하는 게 있다? (0) | 2022.01.14 |
---|---|
Conditionals 확실히 알고있어? : 헷갈리는 개념 복습! (0) | 2022.01.12 |
니꼬샘 ES6의 정석 강의 미리보기: var를 사용하면 안되는 이유(최종판) (0) | 2022.01.07 |
.filter() 써봅니다... feat . MDN (0) | 2022.01.06 |
var를 쓰는것만 고집한다면? - const, let (0) | 2022.01.06 |