JavaScript 모드 전환에 대한 고려 사항
응용 프로그램이나 스크립트의 JavaScript 모드를 전환하면 기존 스크립트의 동작이 변경될 수 있습니다. JavaScript 모드를 전환하기 전에 또는 전환 후 발생하는 문제를 해결하기 위해 동작 변경사항의 몇 가지 예를 검토하십시오.
각 JavaScript 모드에 대한 자세한 내용은 및 JavaScript 엔진 기능 지원를 참조하십시오JavaScript 모드.
이 표는 JavaScript 동작이 관대하고 오류가 발생하기 쉬운 ES5 이전 환경에서 더 엄격하고 예측 가능한 ES5, 그리고 마지막으로 ES12(ECMAScript 2021)의 더 풍부한 기능 환경으로 어떻게 발전했는지 강조합니다.
| 기능 | 호환성 모드 | ES5 표준 모드 | ECMAScript 2021(ES12) |
|---|---|---|---|
| 인수 객체 | arguments 객체가 존재하지만 엄격 모드가 없으므로 수정 사항은 인수에 반영됩니다. 인쇄: |
엄격 모드에서 arguments 객체는 매개 변수 수정 사항을 반영하지 않고 오류를 발생시킵니다. 인쇄: |
ES5와 동일합니다. |
| 부울 재정의 | 기본 부울(true, false)을 재정의하여 예기치 않은 동작을 일으킬 수 있습니다. |
기본 부울은 더 보호되지만 변수에 할당될 때 여전히 재정의될 수 있습니다. | ES5와 동일하지만 엄격 모드는 일부 할당을 방지하는 데 도움이 됩니다. 조건식은 다음 형식으로 작성해야 합니다. |
| 구문 오류에 대한 예외 | 구문 오류는 런타임에 예외를 발생시킵니다. 오류 처리가 일관되지 않습니다. 예시: |
특히 엄격 모드에서 보다 일관된 구문 오류 처리. 예시: |
ES5와 동일하지만 업데이트된 엔진에서 더 강력한 처리와 더 명확한 오류 메시지가 있습니다. 예시: |
| 증가 및 감소 | 변수에 허용되지만 복잡한 식에서 예기치 않게 동작할 수 있습니다. 인쇄: |
명확성이 향상되었지만 변수(var, let, const)에는 여전히 허용됩니다. 인쇄: |
ES5와 동일하지만 일부 컨텍스트(예: const)에서 더 엄격한 규칙이 적용됩니다. |
| 라인 연속 | 백슬래시(\)와 함께 사용할 수 있지만 가독성 문제로 인해 사용하지 않는 것이 좋습니다. 이 예제에서는 세 가지 함수가 모두 호출됩니다. |
호환성 모드와 동일합니다. 처리 라인 연속에는 변경 사항이 없습니다. 이전 예제에서 ES5는 첫 번째 함수 만 호출하고 표현식이 끝날 때까지 줄 바꿈을 포함하여 첫 번째 주석 뒤의 모든 것을 주석으로 처리합니다. | ES5와 동일하지만 템플릿 리터럴이 더 읽기 쉬운 대안을 제공합니다. |
| 세미콜론 누락 | 자동 세미콜론 삽입(ASI)으로 인해 예기치 않은 동작이 발생하는 경우가 많았습니다. | 세미콜론이 없는 경우 구문 오류를 발생시킵니다. | ES5와 동일합니다. 업데이트된 관행은 명시적 세미콜론을 권장합니다. |
| 존재하지 않는 함수 | 존재하지 않는 함수를 호출하면 ReferenceError가 발생합니다. |
함수가 아닌 항목이 호출되면 TypeError 를 발생시킵니다. |
존재하지 않는 함수가 호출되거나 속성이 참조될 때 EcmaError를 발생시킵니다. |
| 존재하지 않는 속성 | 존재하지 않는 속성에 액세스하면 undefined가 반환됩니다. 오류가 발생하지 않았습니다. |
ES5 이전과 동일합니다. | 호환성 모드 및 ES5 표준 모드와 동일합니다. |
| 숫자 리터럴 | 기본 decimal 및 hexadecimal 리터럴. | 더 엄격한 구문 분석 규칙과 숫자 리터럴의 더 나은 처리를 도입했습니다. | 이진수(0b), 8진수(0o) 및 BigInt 리터럴(123n)이 추가되었습니다. |
| 예약된 키워드를 속성으로 | 예약된 키워드는 사용할 수 없습니다. | 예약된 키워드는 오류 없이 속성 이름으로 사용할 수 있습니다(예: obj.for). 반환될 때 개체를 인쇄합니다. |
ES5와 동일합니다. |
| let 및 yield를 키워드로 처리 | let 및 yield 는 키워드가 아니며 식별자로만 사용할 수 있습니다. |
let 이 키워드로 소개되고 있습니다. yield 는 엄격 모드에서 예약되어 있습니다. |
둘 다 키워드입니다. 식별자로 사용하면 구문 오류가 발생합니다. |