네가 알아야 할 JS 네이티브 오류 7개 유형

5151 단어 JS오류 유형error

개요


브라우저 콘솔에서 Node 실행까지.js의 단말기, 우리는 도처에서 오류를 볼 수 있습니다.본고의 중점은 우리가 js 개발 과정에서 만날 수 있는 오류 유형을 개술하는 것이다.
제시: 좋은 오류 제시는 신속하고 통증이 없는 발전 경험과 느리고 고통스러운 발전 경험 간의 차이를 초래할 수 있다.다시 사용할 수 있는 코드를 작성할 때, 명확하고 알기 쉬운 오류 처리 코드를 작성하고 있는지 확인하십시오.

1. RangeError


숫자가 허용된 값 범위를 초과하면 이 오류가 발생합니다.
예:

const l = console.logconst arr = [90,88]
arr.length=90**99
우리는 두 개의 원소를 가진arr가 있는 수조가 있다.다음은 90*99==2.9512665430652753e+193개의 원소를 포함하는 수조로 확장해 보십시오.
이 숫자는 수조의 크기가 증가할 수 있는 범위를 넘어섰다.실행하면 RangeError가 발생합니다.
$ node errors
errors.js:4
arr.length=90**99
 ^RangeError: Invalid array length
왜냐하면 우리는 arr수조의 크기를 늘려야 하기 때문에 JS가 지정한 범위를 초과했다.

2. ReferenceError


변수나 항목에 대한 인용이 파괴되면 오류가 발생합니다.그것은 변수나 항목이 존재하지 않는 것이다.
예:

const l=console.logconst cat = "cat"
cat
dog
변수cat가 "cat"으로 초기화됩니다.다음은cat 변수와dog 변수를 인용했습니다.cat 변수는 존재하지만dog 변수는 존재하지 않습니다.
cat는'cat'으로 되돌아오고, dog는 환경 기록에서 이름을 찾을 수 없기 때문에 인용 오류를 일으킬 것입니다.
$ node errors
errors.js:3
dog
^ReferenceError: dog is not defined
우리가 변수를 만들거나 정의할 때마다 변수 이름은 환경 기록에 기록됩니다.환경 기록은 키 값 저장과 같이
+-------------+
| Key | Value |
---------------
| cat | "cat"|
+-------------+
우리가 변수를 인용할 때마다 프로그램에 정의된 변수를 저장합니다.레코드에서 환경 값을 찾아 추출하고 반환하면 환경 레코드에서 이 변수의 이름을 키워드로 검색합니다.정의되지 않은 함수를 호출합니다.
현재, 우리가 값을 부여하지 않은 변수를 만들거나 정의할 때.변수는 키를 변수 이름으로 환경 기록에 쓰지만 값은 정의되지 않은 상태로 유지됩니다.
var catenv record
+-----------------+
| Key | Value |
-------------------
| cat | undefined |
+-----------------+
나중에 변수에 값을 할당하면 환경 레코드에서 이 변수가 정의되지 않은 값을 발견하면 덮어씁니다.
var cat
cat = "cat"env record
+-------------+
| Key | Value |
---------------
| cat | "cat"|
+-------------+
따라서 환경 기록에서 변수 이름을 찾을 수 없을 때 JS 엔진은 RefernceError를 일으킬 것입니다.
+-------------+
| Key | Value |
---------------
| cat | "cat"|
+-------------+cat//"cat", yes, :) it's there
dog//:( what's this? can't find it
참고: 정의되지 않은 변수는 ReferenceError를 내보내지 않습니다. 환경 레코드의 값이 설정되지 않았기 때문입니다.

3. SyntaxError


이것은 가장 흔히 볼 수 있는 잘못이다.JS 엔진이 이해할 수 없는 코드를 입력하면 이 오류가 발생합니다.
JS 엔진이 해석하는 동안 이 오류를 포착했습니다.JS 엔진에서 우리의 코드는 서로 다른 단계를 거친 후에야 단말기에서 결과를 볼 수 있다.
  • 태그화
  • 해석
  • 해석
  • 표기화는 코드의 원본을 각 단원으로 분해한다.이 단계에서는 숫자, 키워드, 문자, 연산자를 분류하고 표시합니다.
    다음에 생성된 표기 흐름은 해석 단계로 전달되고 해석기가 처리합니다.태그 흐름에서 AST가 생성되는 곳입니다.AST는 코드 구조의 추상적인 표현이다.
    이 두 단계를 표기하고 해석할 때 코드의 문법이 JS의 문법 규칙에 부합되지 않으면 이 단계를 실패하고 SyntaxError를 일으킬 수 있습니다.예:
    
    const l = console.loglet cat h = "cat"
    코드의 "h"는 무엇을 대표합니까?이 "h"는 코드를 파괴했다.
    $ node errors
    errors.js:3
    let cat h = "cat"
     ^SyntaxError: Unexpected identifier
    봐라, 노드.js는 문제의 소재를 지적했다.그것은'h'가 의외라고 말했다.cat 변수의 성명을 파괴했다.
    따라서 문법 오류는 해석이나 번역 기간에 발생한다고 할 수 있다.

    4. TypeError


    다른 NativeError 객체에 적절한 실패 원인에 대한 지시가 없는 경우 TypeError는 작업 실패를 나타내는 데 사용됩니다.
    잘못된 데이터 유형에 대해 작업을 수행하면 TypeError가 발생합니다(예:
    숫자를 대문자로 변환하려면 다음과 같이 하십시오.
    
    const num = 123
    num.toUpperCase()
    그러면 TypeError가 발생합니다.
    $ node errors
    errors.js:4
    num.toUpperCase()
     ^TypeError: num.toUpperCase is not a function
    toUpperCase 함수는 문자열 데이터 형식이 필요하기 때문입니다.toUpper Case 함수는 의도적으로 통용됩니다.this 값이 String 객체일 필요는 없습니다.따라서 다른 종류의 대상에 옮겨서 방법으로 사용할 수 있다.
    문자열만 대문자 또는 소문자로 변환됩니다. 만약에 Objects, Boolean, Symbol,null,undefined 데이터 형식에서 toUpperCase 함수를 호출하면 TypeError가 동작하는 데이터 형식이 잘못되었기 때문입니다.

    5. URIError


    이것은 정의와 호환되지 않는 전역 URI 처리 함수를 사용했음을 나타낸다.
    JS의 URI(통일 자원 표시부호)는 decodeURI, decodeURIComponent 등 다음과 같은 기능을 가지고 있다.
    만약 우리가 잘못된 매개 변수로 그 중 하나를 호출한다면, URIERror에 도착할 것이다.
    
    decodeURI("%")
    ^URIError: URI malformed
    encodeURI는 URI의 인코딩되지 않은 버전을 가져오는 데 사용됩니다.'%'는 올바른 URI가 아니므로 URIERROr를 유발합니다.
    URI 인코딩이나 디코딩에 문제가 발생하면 URIERror가 발생합니다.

    6. EvalError


    전역 eval () 함수를 사용할 때 오류를 식별하는 데 사용됩니다.
    EcmaSpec 2018 버전:
    이 사양명세는 현재 이 이상을 사용하지 않습니다.이 규범의 이전 버전과 호환되도록 보존합니다.

    7. InternalError


    이 오류는 JS 엔진 내부에서 발생하는데, 특히 처리할 데이터가 너무 많고 창고가 관건적인 제한을 초과할 때 발생한다.
    JS 엔진이 과도한 귀속과 전환 상황 등에 잠겼을 때 이런 문제가 발생한다
    
    switch(num) {
     case 1:
     ...
     break
     case 2:
     ...
     break
     case 3:
     ...
     break
     case 4:
     ...
     break
     case 5:
     ...
     break
     case 6:
     ...
     break
     case 7:
     ...
     break
     ... up to 1000 cases
     }
    다음은 단순 과다 귀속의 예입니다.
    
    function foo() {
        foo()
    }
    foo()

    총결산


    우리가 말한 바와 같이 누구나 실수를 할 수 있다.우리가 코드를 두드리는 일로 말하자면, 이것은 안정적인 사건이다.그것을 극복하기 위해서는 던질 수 있는 원생 오류의 유형을 알아야 한다.본고는 그것들을 열거하였으며, 그것들이 어떻게 일어났는지 설명하기 위해 몇 가지 예시를 제공하였다.
    따라서 언제든지 터미널이나 브라우저에서 오류가 발생하면 오류가 발생하는 위치와 방식을 쉽게 발견할 수 있고 더 좋고 더 틀리기 쉬운 코드를 작성할 수 있다.
    이상은 당신이 알아야 할 JS 원생 오류 유형 7개에 대한 상세한 내용입니다. JS 원생 오류 유형에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

    좋은 웹페이지 즐겨찾기