자바스크립트 엄격 모드
자바스크립트 엄격 모드(strict mode)는 엄격한 조건에서 실행됩니다.
"use strict" 지시어 사용
"use strict" 지시어는 JavaScript 1.8.5(ECMAScript5)의 새로운 기능입니다.
문이 아니라 리터럴 표현식이므로 이전 버전의 JavaScript에서는 무시됩니다.
"use strict"의 목적은 코드가 엄격한 조건에서 실행되도록 지정하는 것입니다.
엄격 모드에서는 선언되지 않은 변수를 사용할 수 없습니다.
엄격 모드를 지원하는 브라우저:
|
엄격 모드 선언
엄격 모드는 스크립트나 함수 앞에 "use strict" 표현식을 추가하여 선언됩니다.
이 예에서는 브라우저에서 F12를 누르거나(또는 "도구>추가 도구>개발자 도구"를 클릭)디버깅 모드를 켜고 오류 메시지를 볼 수 있습니다.
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用未定义的变量。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; x = 3.14; // 报错 (x 未定义) </script> </body> </html>
인스턴스 실행»
"인스턴스 실행"을 클릭합니다. 버튼 온라인 인스턴스 보기
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h2>全局 "use strict" 声明.</h2> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; myFunction(); function myFunction() { y = 3.14; // 报错 (y 未定义) } </script> </body> </html>
실행 중인 인스턴스»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
함수 내부에서 로컬 범위로 선언됨(함수 내에서는 엄격 모드만 사용):
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <p>在函数内使用 "use strict" 只在函数内报错。 </p> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> x = 3.14; // 不报错 myFunction(); function myFunction() { "use strict"; y = 3.14; // 报错 (y 未定义) } </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
이유 엄격 모드 사용:
- Javascript 구문의 불합리하고 부정확한 측면을 제거하고 이상한 동작을 줄입니다.
- 코드의 일부 안전하지 않은 측면을 제거합니다. 작업, 코드 실행 안전성 보장
- 컴파일러 효율성 향상 및 실행 속도 향상
- 향후 새로운 버전의 Javascript를 위한 기반 마련 .
엄격 모드 제한선언되지 않은 변수는 허용되지 않습니다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用未定义的变量。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; x = 3.14; // 报错 (x 未定义) </script> </body> </html>
인스턴스 실행»온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用为定义的对象。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; x = {p1:10, p2:20}; // 报错 (x 未定义) </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
변수나 객체의 삭제는 허용되지 않습니다.
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许删除变量或对象。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var x = 3.14; delete x; </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
기능 삭제는 허용되지 않습니다.
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许删除函数。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; function x(p1, p2) {}; delete x; </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
중복 변수 이름은 허용되지 않습니다:
Instance
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许变量重名。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; function x(p1, p1) {}; // 报错 </script> </body> </html>
Run Instance»
"인스턴스 실행" 버튼 온라인 인스턴스 보기
8진수는 허용되지 않음:
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用八进制。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var x = 010; // 报错 </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
이스케이프 문자는 허용되지 않습니다:
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用转义字符。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var x = 0; // 报错 </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요.
읽기 전용 속성 할당은 허용되지 않습니다.
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许对只读属性赋值。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // 报错 </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
속성에 값 할당
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许对一个使用getter方法读取的属性进行赋值。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // 报错 </script> </body> </html>
인스턴스 실행에서 getter 메서드를 사용하여 읽기를 허용하지 않습니다. »
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요.
삭제가 허용되지 않는 속성은 삭제할 수 없습니다:
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许删除一个不允许删除的属性值。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; delete Object.prototype; // 报错 </script> </body> </html>
인스턴스 실행 중 »
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
변수 이름은 "eval" 문자열을 사용할 수 없습니다:
Instance
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>变量名不能使用 "eval" 字符串。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var eval = 3.14; // 报错 </script> </body> </html>
인스턴스 실행»
"인스턴스 실행"을 클릭합니다. 온라인 인스턴스를 보려면 버튼
변수 이름에는 "인수" 문자열을 사용할 수 없습니다:
예
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>变量名不能使用 "arguments" 字符串。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var arguments = 3.14; // 报错 </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요.
다음 문은 허용되지 않습니다.
인스턴스
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>不允许使用以下这种语句。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; with (Math){x = cos(2)}; // 报错 </script> </body> </html>
인스턴스 실행»
온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요
기한 일부 보안상의 이유로 eval() 범위로 생성된 변수에서는
Instance
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>由于一些安全原因,在作用域 eval() 创建的变量不能被调用。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; eval ("var x = 2"); alert (x); // 报错 </script> </body> </html>
인스턴스 실행»<을 호출할 수 없습니다. 🎜>온라인 인스턴스를 보려면 "인스턴스 실행" 버튼을 클릭하세요.
function f(){ return !this; } // 返回false,因为"this"指向全局对象,"!this"就是false function f(){ "use strict"; return !this; } // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。따라서 생성자를 사용할 때 new를 추가하는 것을 잊어버린 경우 생성자는 더 이상 전역 객체를 가리키지 않지만 오류가 보고됩니다.
function f(){ "use strict"; this.a = 1; }; f();// 报错,this未定义
예약 키워드향후 새 버전의 Javascript로 전환하기 위해 엄격 모드에 몇 가지 새로운 예약 키워드가 추가되었습니다:
- 구현
- 인터페이스
- let
- 패키지
- 비공개
- 보호됨
- 공개
- 정적
- yield
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h1>使用 "use strict":</h1> <h3>严格模式不允许使用保留关键字。</h3> <p>浏览器按下 F12 开启调试模式,查看报错信息。</p> <script> "use strict"; var public = 1500; // 报错 </script> </body> </html>
인스턴스 실행»" 클릭 "예제" 버튼을 눌러 온라인 예시를 확인하세요
"use strict" 指令只运行出现在脚本或函数的开头。 |