>웹 프론트엔드 >JS 튜토리얼 >엄격 모드에서 JavaScript 고급 구문 학습

엄격 모드에서 JavaScript 고급 구문 학습

WBOY
WBOY앞으로
2022-05-24 13:45:411776검색

이 글은 javascript에 대한 관련 지식을 제공하며, 엄격 모드와 관련된 문제를 주로 소개합니다. 엄격 모드는 이해하기 쉬운 제한적인 JavaScript 모드로, "게으른 모드"에서 벗어나 보겠습니다. 아래를 살펴보세요. 모든 사람에게 도움이 되기를 바랍니다.

엄격 모드에서 JavaScript 고급 구문 학습

[관련 권장사항: javascript 비디오 튜토리얼, 웹 프론트엔드]

1. 엄격 모드 이해

  • ECMAScript5 표준에서 JavaScript는 엄격 모드의 개념을 제안했습니다.

    • 엄격 모드 코드가 암시적으로 "게으른 모드"에서 벗어나도록 만드는 제한적인 JavaScript 모드라는 것을 이해하기 쉽습니다.

    • 엄격 모드를 지원하는 브라우저는 코드에서 엄격 모드를 감지할 때 더욱 엄격한 방식으로 코드를 감지하고 실행합니다.

  • 엄격 모드는 일반적인 JavaScript 의미 체계에 몇 가지 제한을 적용합니다.

    • 엄격 모드는 오류 발생을 통해 원래의 자동 오류 중 일부를 제거합니다.

    • Strict 모드를 사용하면 JS 엔진이 코드를 실행할 때 더 많은 최적화를 수행할 수 있습니다(특수 구문을 처리할 필요 없음).

    • Strict 모드는 ECMAScript의 향후 버전에서 정의될 수 있는 일부 구문을 비활성화합니다.

2. 엄격 모드 켜기

그럼 어떻게 엄격 모드를 켜나요? 엄격 모드는 세분화된 마이그레이션을 지원합니다.

  • js 파일에서 엄격 모드 켜기를 지원할 수 있습니다.
  • 또한 특정 기능에 대해 엄격 모드 켜기를 지원합니다.

3. 엄격한 모드 제한

JavaScript는 초보 개발자를 위해 설계되었습니다. 시작하기가 더 쉽기 때문에 잘못된 구문을 구매하면 정상적으로 구문 분석이 불가능할 수도 있습니다.
그러나 이 방법은 보안 위험을 가져올 수 있습니다.
엄격 모드에서는 이러한 종류의 거래가 오류로 간주됩니다.
몇 가지 일반적인 제한 사항을 요약했습니다.

1. 실수로 전역 변수를 생성할 수 없습니다.

실수로 전역 변수를 생성하는 방법에는 두 가지가 있습니다.

  • 전역적으로 키를 직접 사용하지 마세요. 전역 변수 선언
  • 함수 내에서 변수를 선언하는 데 키워드를 사용하지 마세요. 함수는 기본적으로 전역 변수로 승격됩니다.
    샘플 코드는 다음과 같습니다.
'use strict'
// 禁止意外创建全局变量
message = '意外创建全局变量'
console.log(message) // 报错信息为:Uncaught ReferenceError: message is not defined

function foo () {
    age = 20
    console.log(age)
}
foo() // ReferenceError: age is not defined

2. 오류 예외 보고

샘플 코드는 다음과 같습니다.

//开启严格模式,将问题直接转化为报错
'use strict'
const v = 100;//(定义常量)
v = 1.14;//重新赋值(为变量)

console.log(v); // Uncaught TypeError: Assignment to constant variable.

3. 엄격 모드에서 삭제할 수 없는 속성을 삭제하려고 합니다.

엄격 모드에서는 변수에 선택 해제 연산자를 사용할 수 없습니다.

(1) 변수에는 삭제 키워드를 사용하세요

  // 开启严格模式
'use strict'

var v = 100;
delete v;//非严格模式下:此处为静默失败,既没有报错也没有删除变量v
console.log(v);//100
//开启严格模式后,改为报错Delete of an unqualified identifier in strict mode.

(2). 배열 및 메서드 속성에는 삭제 키워드를 사용하세요.

엄격 모드에서 배열 및 메서드 속성에는 삭제 키워드를 사용하세요. 효과는 그대로 유지됩니다.

// 开启严格模式
'use strict'

// 1、严格模式下删除数组内容
var arr = [1,2,3,4]
delete arr[0];
console.log(arr);//[ <1 empty item>, 2, 3, 4 ]

// 2、严格模式下delete函数的属性
var obj  =  {
    name : '猪猪侠 '
}
delete obj.name;
console.log(obj.name)//undefined

4. 엄격 모드에서는 함수 매개변수의 이름이 같은 것을 허용하지 않습니다.

샘플 코드는 다음과 같습니다.

'use strict'
// 不允许函数有相同的参数名称
function foo2 (x, y, x) {
    console.log(x, y, x)
}
foo2(10, 20, 30) // SyntaxError: Duplicate parameter name not allowed in this context

5 8진수 구문은 허용되지 않습니다

샘플 코드는 다음과 같습니다.

// 不允许使用原先的八进制格式
var num1 = 0123
var num2 = 0o123 // 可以写成这种格式 八进制
var num3 = 0x123 // 可以写成这种格式 十六进制
var num4 = 0b100 // 可以写成这种格式 二进制

console.log(num1) // SyntaxError: Octal literals are not allowed in strict mode.
console.log(num2, num3, num4) // 83 291 4

6. 엄격 모드에서는 with

사용이 허용되지 않습니다. 샘플 코드는 다음과 같습니다.

'use strict'
var message = 'Hello World';

var obj = { name: 'jam', age: 20 }
// with语句可以形成自己的作用域,在with语句中打印age时,会输出obj对象中的age属性,但在with语句中打印不存在的属性message时,会向外层的作用域一层一层去查找
function foo () {
    with (obj) {
        console.log(age) 
        console.log(message) 
    }
    console.log(message)
}
foo() // SyntaxError: Strict mode code may not include a with statement

7. 상위 레이어

샘플 코드는 다음과 같습니다.

var jsString = "var message = 'hello world';console.log(message)"
eval(jsString) // 输出  hello world
console.log(message) // 报错信息为:ReferenceError: message is not defined

开启严格模式 eval函数不会向上引用变量 所以全局作用域就没有message这个变量所以会报错

8 엄격 모드에서는 이 바인딩이 기본적으로 객체로 변환되지 않습니다.

샘플 코드는 다음과 같습니다.

'use strict'
// 在严格模式下,自执行函数(默认绑定)会指向undefined  ,非严格模式下会指向window
function foo () {
    console.log(this)
}
foo() // undefined

[관련 추천: javascript 비디오 튜토리얼, 웹 프론트엔드]

위 내용은 엄격 모드에서 JavaScript 고급 구문 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제