>  기사  >  웹 프론트엔드  >  자바스크립트 핵심 읽기 문장_자바스크립트 기술

자바스크립트 핵심 읽기 문장_자바스크립트 기술

WBOY
WBOY원래의
2016-05-16 16:14:371047검색

JavaScript에서 표현식은 구이고, 명령문은 전체 문장 또는 명령입니다. 영어 문장이 마침표로 끝나는 것처럼 JavaScript는 세미콜론으로 끝납니다.

식은 값으로 평가되지만 문은 어떤 일이 발생하게 합니다.

'뭔가 일어나게 하는' 한 가지 방법은 부작용이 있는 표현식을 평가하는 것입니다. 할당, 함수 호출 등 부작용이 있는 표현식은 별도의 문으로 처리될 수 있습니다. 표현식을 명령문으로 사용하는 것을 표현식 명령문이라고도 합니다. 유사한 명령문에는 새 변수를 선언하거나 새 함수를 정의하는 데 사용되는 선언문이 포함됩니다.

JavaScript 프로그램은 기본적으로 실행 가능한 명령문의 모음입니다. 기본적으로 JavaScript 인터프리터는 해당 명령문을 순서대로 실행합니다. "뭔가를 발생시키는" 또 다른 방법은 문의 기본 실행 순서를 변경하는 것입니다.

1. 조건문: JavaScript 해석기는 표현식의 값을 기준으로 if 및 switch 문과 같은 문을 실행할지 아니면 건너뛸지 여부를 판단할 수 있습니다.

2. 루프문: while문, for문 등 반복적으로 실행될 수 있는 문

3. 점프 문: 해석기가 프로그램의 다른 부분으로 점프하여 실행을 계속할 수 있습니다(예: break, return 및 throw 문)

다음 글에서는 JavaScript의 다양한 구문과 구문을 소개합니다. 이 장은 이러한 진술의 요약으로 마무리됩니다. 자바스크립트 프로그램은 분리된 문장들의 집합에 지나지 않으므로 자바스크립트 문장을 마스터하면 자바스크립트 프로그램을 작성할 수 있습니다.

1. 표현문

대입문은 상대적으로 중요한 표현식 문입니다. 그 기능은 할당문을 실행하는 것과 마찬가지로 변수의 값을 변경하는 것입니다. 예를 들어

코드 복사 코드는 다음과 같습니다.

              인사 = "안녕하세요" 이름;
             i *= 3;

증가 연산자( )와 감소 연산자(--)는 대입문과 관련이 있습니다. 그 목적은 할당문을 실행하는 것처럼 변수의 값을 변경하는 것입니다.

코드 복사 코드는 다음과 같습니다.

카운터 ;

delete 연산자의 중요한 역할은 객체의 속성(또는 배열의 요소)을 삭제하는 것이므로 일반적으로 복잡한 표현식의 일부가 아닌 명령문으로 사용됩니다.

코드 복사 코드는 다음과 같습니다.

o.x 삭제;

함수 호출은

과 같은 표현식 문의 또 다른 주요 범주입니다.

코드 복사 코드는 다음과 같습니다.

경고(인사);
              window.close();

이러한 클라이언트 측 기능은 표현식이지만 웹 브라우저에 일정한 영향을 미칩니다. 따라서 우리는 명령문도 의미가 없다고 생각합니다. 예를 들어 복잡한 표현식이나 할당 명령문의 일부가 아닌 이상 부작용이 없는 함수를 호출하는 것은 의미가 없습니다. 코사인 값을 아무렇게나 버리는 것은 불가능합니다.

Math.cos(x);

반대로 코사인 값을 얻으려면 나중에 그 값을 사용할 수 있도록 변수에 할당해야 합니다.

var cx = Math.cos(x);

각 코드 줄은 세미콜론으로 끝난다는 점을 모두에게 다시 한 번 상기시켜주세요.

2. 복합문과 빈문

쉼표 연산자를 사용하면 여러 표현식을 결합하여 하나의 표현식을 만들 수 있습니다. 마찬가지로 JavaScript는 여러 문을 결합하여 복합 문을 형성할 수도 있습니다. 여러 명령문을 중괄호로 묶으면 됩니다. 따라서 다음 코드 줄은 단일 명령문으로 처리될 수 있으며 명령문이 필요한 JavaScript의 어느 곳에서나 사용할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

{
                    x = Math.PI;
                     cx = Math.cos(x);
console.log("cos(π)=" cx);
            }

문 블록에 관해 주의해야 할 몇 가지 사항이 있습니다. 첫째, 문 블록에는 세미콜론이 필요하지 않습니다. 블록 내의 요소 명령문은 세미콜론으로 끝나야 하지만 명령문 블록은 그렇지 않습니다.

둘째, 명령문 블록의 줄은 들여쓰기되어 있습니다. 꼭 필요한 것은 아니지만 들여쓰기를 깔끔하게 하면 코드를 더 읽기 쉽고 이해하기 쉽게 만들 수 있습니다.

셋째, JavaScript에는 블록 수준 범위가 없으며 명령문 블록에 선언된 변수는 명령문 블록에만 적용되지 않습니다. (3장 10절 첫 번째 부분 참조)

많은 문을 하나의 큰 문 블록으로 병합하는 관행은 JavaScript 프로그래밍에서 매우 일반적입니다. 유사한 표현식에는 하위 표현식이 포함되는 경우가 많으며, 많은 JavaScript에는 다른 하위 명령문이 포함되어 있습니다. 공식적으로 말하면 JavaScript에서는 일반적으로 명령문 블록에 하나의 하위 명령문이 포함될 수 있습니다. 예를 들어 while 루프의 루프 본문에는 명령문이 하나만 포함될 수 있습니다. 명령문 블록을 사용하면 이 블록에 여러 개의 명령문을 넣을 수 있으며, 이 명령문 블록은 하나의 명령문으로 사용될 수 있습니다.

JavaScript에서는 여러 개의 문을 하나의 문으로 사용하려면 일치하는 문을 대신 사용하세요. 빈 문은 정반대이며 0개의 문을 허용합니다. 빈 명령문은 다음과 같습니다.

;//세미콜론

JavaScript 인터프리터는 빈 문을 실행할 때 어떤 작업도 수행하지 않지만 실습을 통해 다음 for 루프와 같이 빈 루프 본문이 있는 루프를 생성할 때 빈 문이 때때로 유용하다는 것이 입증되었습니다.

코드 복사 코드는 다음과 같습니다.

//배열 초기화
for (i = 0; i

이 루프에서는 모든 연산이 a[i]=0 표현식에서 완료되며 여기에는 루프 본문이 필요하지 않습니다. 그러나 JavaScript에서는 루프 본문에 하나 이상의 문이 포함되어야 하므로 여기에서는 빈 문을 나타내기 위해 단일 세미콜론이 사용됩니다.

for 루프, while 루프 또는 if 문의 오른쪽 괄호에 있는 세미콜론은 눈에 띄지 않아 치명적인 버그를 일으킬 가능성이 높으며 이러한 버그를 찾기가 어렵습니다. 예를 들어, 다음 코드의 실행 결과는 작성자가 의도하지 않은 효과가 나타날 가능성이 높습니다.

코드 복사 코드는 다음과 같습니다.

If((a==0)||(b==0)); //이 코드 줄은 아무 작업도 수행하지 않습니다....
              o = null; //이 코드 줄은 항상 실행됩니다.

특수 목적으로 빈 문을 사용하는 경우 이 빈 문이 유용하다는 점을 더 명확하게 하기 위해 코드에 주석을 추가하는 것이 가장 좋습니다.

코드 복사 코드는 다음과 같습니다.

for (i = 0; i

3. 선언문

Var와 function은 변수나 함수를 선언하거나 정의하는 선언문입니다. 이러한 명령문은 프로그램의 어느 곳에서나 사용할 수 있는 식별자(변수 및 함수 이름)에 값을 정의하고 할당합니다. 선언문 자체는 아무 작업도 수행하지 않지만 중요한 의미를 갖습니다. 변수와 함수를 생성하면 코드의 의미를 더 잘 구성할 수 있습니다.

다음 몇 섹션에서는 var 문과 function 문에 대해 설명하지만 변수와 함수의 모든 내용을 다루지는 않습니다.

i.var

var 문은 하나 이상의 변수를 선언하는 데 사용됩니다. 해당 구문은 다음과 같습니다.

var 이름_1[ = 값_1][, ..., 이름_n[ = 값_n]]

var 키워드 뒤에는 선언할 변수 목록이 옵니다. 목록의 각 변수에는 초기 값을 지정하는 데 사용할 수 있는 초기화 표현식이 있을 수 있습니다. 예:

코드 복사 코드는 다음과 같습니다.

              var i; 간단한 변수
                var j = 0 //초기값을 갖는 변수
               var p, q //변수 2개
               var Greeting = "hello" name; // 더 복잡한 초기화 표현식
               var x = 2.34,y = Math.cos(0.75),r, theta //많은 변수
               var x = 2,y = x * x //두 번째 변수는 첫 번째 변수를 사용합니다.
          var x = 2,
F = function (x) {Return x * X}, // 각 변수는 한 줄에 배타적입니다
            y = f(x)

함수 본문에 var 문이 나타나면 지역 변수가 정의되고 해당 범위는 이 함수입니다. 최상위 코드에서 var 문을 사용하면 JavaScript 전체에서 볼 수 있는 전역 변수가 선언됩니다. 3장 10절에서 언급한 바와 같습니다. 전역 변수는 전역 객체의 속성입니다. 다른 전역 객체 속성과 달리 var로 선언된 변수는 삭제를 통해 삭제할 수 없습니다.

var 문의 변수가 초기화 표현식을 지정하지 않으면 이 변수의 값은 처음에 정의되지 않습니다. 따라서 선언문 앞의 변수 값은 정의되지 않습니다.

var 문은 for 루프 또는 for/in 루프의 구성 요소로 사용될 수도 있습니다. (루프 이전에 선언된 변수 선언과 마찬가지로 여기서 선언된 변수도 "고급"이 됩니다.) 예:

코드 복사 코드는 다음과 같습니다.

for (var i = 0; i for (var i = 0, j = 10; i for (var i in o)console.log(i);

동일한 변수를 여러 번 선언해도 문제가 되지 않습니다.

ii.기능

함수 선언에는 함수라는 키워드가 사용됩니다. 우리는 이미 함수 표현식(4.3)을 배웠습니다. 함수 정의는 명령문 형식으로 작성될 수 있습니다. 예: 아래 샘플 코드의 두 가지 정의 작성 방법:

코드 복사 코드는 다음과 같습니다.

                var f = function f(x) {return x 1;} //변수에 표현식 할당
               function f(x){return x 1;} //변수 이름이 포함된 명령문

함수 선언 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

함수 funcname([arg1[, arg2[..., argn]]]) {
진술
            }

funcname은 선언할 함수의 이름 식별자입니다. 함수 이름 뒤에는 쉼표로 구분된 매개변수 목록이 있습니다. 함수가 호출될 때 이러한 식별자는 함수에 전달된 실제 매개변수를 참조합니다.

함수 본문은 JavaScript 문으로 구성되며 문 수에는 제한이 없으며 중괄호로 묶여 있습니다. 함수가 정의되면 함수 본문의 명령문은 실행되지 않지만 함수 호출 시 실행될 새 함수 개체와 연결됩니다. 함수 문에는 중괄호가 필요합니다. 이는 while 루프 및 기타 문 잠금에서 사용되는 문 블록과 다릅니다. 함수 본문에 문이 하나만 있어도 이를 묶는 데 중괄호가 필요합니다.

코드 복사 코드는 다음과 같습니다.

함수 hyteus(x, y) {
                     return Math.sqrt(x * x y * y);
            }
하이테우스(1, 2) //=>2.23606797749979
              function facial(n) { //재귀 함수
(n n * 얼굴(n - 1) 반환;
            }
얼굴(11) //=>39916800

함수 선언은 일반적으로 JavaScript 코드 상단에 나타나며 다른 함수 본문 내에 중첩될 수도 있습니다. 그러나 중첩된 경우 함수 선언은 중첩된 함수의 맨 위에만 나타날 수 있습니다. 즉, 함수 정의는 if, while 또는 기타 문에 나타날 수 없습니다.

var 문과 마찬가지로 함수 선언문으로 생성된 변수는 삭제할 수 없습니다. 하지만 이러한 변수는 읽기 전용이 아니며 변수 값을 덮어쓸 수 있습니다.

4. 조건문

조건문은 지정된 표현식의 값이 맞는지 판단하여 특정 명령문을 실행하거나 건너뛰는 데 사용됩니다. 이러한 문은 코드의 "결정 지점"이며 "분기"라고도 합니다. 코드의 "경로"에 따라 자바스크립트 인터프리터가 실행되는 경우. 조건문은 갈림길입니다. 프로그램은 이 지점에 도달했으며 실행을 계속하려면 경로를 선택해야 합니다.

i.if문

if 문은 정확하게 말하면 프로그램이 조건부로 실행되도록 하는 기본 제어 문입니다. 첫 번째는

입니다.

코드 복사 코드는 다음과 같습니다.

If(표현식)
성명

이 형식에서는 표현식의 값이 true이면 명령문이 실행됩니다. 예를 들어

코드 복사 코드는 다음과 같습니다.

If (username == null) //사용자 이름이 null이거나 정의되지 않은 경우
                    사용자 이름 = "jack wong" // 정의

if 문에서 표현식을 둘러싸는 괄호가 필요하다는 점에 유의하세요.

자바스크립트 구문에서는 if 키워드와 괄호가 있는 표현식 뒤에 명령문이 와야 한다고 규정합니다. 그러나 명령문 블록을 사용하여 여러 명령문을 하나로 결합할 수 있습니다. 따라서 if 문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

                 if (!address) {
                주소 = "";
                  메시지 = "메일 주소를 부탁드립니다"
            }

if 문의 두 번째 형식은 else 절을 ​​도입합니다. 표현식의 값이 false이면 else 논리가 실행됩니다.

코드 복사 코드는 다음과 같습니다.

If(표현식)
                진술1
           그 외
                진술2

예를 들어 다음 코드는

코드 복사 코드는 다음과 같습니다.

                  if (n == 1)
console.log("1개의 새 메시지");
           그 외
console.log("you have" n "new message");

if/else 문에 if 문을 중첩할 때는 else 문이 올바른 if 문과 일치하는지 확인해야 합니다. 다음 코드를 고려해보세요:

코드 복사 코드는 다음과 같습니다.

              i = j = 1;
               k = 2;
                 if (i == j)
만약 (j == k)
console.log("i equs k");
           그 외
                  console.log("i는 j와 동일합니다") //오류! !

이 예에서 내부 if 문은 외부 if 문에 필요한 절을 구성합니다. 그러나 if와 else 사이의 일치 관계는 명확하지 않으며(들여쓰기만 힌트를 제공합니다) 이 경우 들여쓰기가 잘못된 힌트를 제공합니다. 왜냐하면 JavaScript 인터프리터가 이를 이해하는 방식이기 때문입니다.

코드 복사 코드는 다음과 같습니다.

                if (i == j) {
만약 (j == k)
console.log("i equs k");
그 외 console.log("나는 j와 같지 않습니다.");
            }

대부분의 프로그래밍 언어와 마찬가지로 JavaScript의 if 및 else 일치 규칙은 else가 항상 가장 가까운 if 문과 일치한다는 것입니다. 예를 더 읽기 쉽고, 이해하기 쉽고, 유지 관리 및 디버깅하기 쉽게 만들기 위해 중괄호를 사용합니다.

사용해야 함

코드 복사 코드는 다음과 같습니다.
If (i == j) {
If (j == k) {
console.log("i equs k");
} Else {// 코드 결과를 더욱 명확하게 만드는 Bunduk
console.log("나는 j와 같지 않습니다.");
                }
            }

많은 프로그래머는 if 및 else 문 본문을 중괄호로 묶는 습관을 갖고 있습니다(while 루프와 같은 일치 문에서와 마찬가지로). 분기당 문이 하나만 있더라도 이렇게 하면 현재 문제를 피할 수 있습니다. 프로그램 모호성 문제.

ii.else if

if/else 문은 표현식의 평가 결과를 판단하여 두 분기 중 하나를 선택합니다. 코드에 분기가 많으면 어떻게 해야 합니까? 한 가지 해결책은 else if 문을 사용하는 것입니다. else if는 실제 자바스크립트 문이 아니며, 서로 연결된 여러 if/else 문을 작성하는 방법일 뿐입니다.

코드 복사 코드는 다음과 같습니다.

                  if (n == 1) {
//코드 블록 1 실행
               } else if (n == 2) {
//코드 블록 2 실행
                } else if (n == 3) {
//코드 블록 3 실행
              } else {
//이전 조건이 모두 false인 경우 코드 블록 4를 실행
            }

이 코드에는 특별한 내용이 없습니다. 여러 개의 if 문으로 구성되어 있으며 각 if 문의 else 절에는 또 다른 if 문이 포함되어 있습니다. 구문적으로 동일한 코드는 중첩된 형태의 if 문을 사용하여 완성할 수 있지만, 이에 비해 else if 작성 방식이 확실히 더 명확하고 더 바람직합니다.

iii.스위치

if 문은 프로그램 실행 중에 분기를 생성하고, else if는 여러 분기를 처리하는 데 사용할 수 있습니다. 그러나 모든 분기가 동일한 표현식의 값에 의존하는 경우 else if는 최선의 솔루션이 아닙니다. 이 경우 여러 if 문에서 표현식을 반복적으로 평가하는 것은 낭비입니다.

switch 문은 이러한 상황을 처리하는 데 적합합니다. 키워드 스위치 뒤에는 괄호로 묶인 표현식이 옵니다. 그 다음에는 중괄호로 묶인 코드 블록이 나옵니다.

코드 복사 코드는 다음과 같습니다.

스위치(표현) {
진술
            }

그러나 switch 문의 전체 구문은 이보다 더 복잡합니다. 대소문자 뒤에는 표현식과 콜론이 있습니다. 대소문자는 태그에 이름이 없다는 점을 제외하면 태그와 매우 유사합니다.

뒤에 오는 표현에만 연관됩니다. 이 switch 문이 실행되면 먼저 표현식의 값을 계산한 다음, Case 절의 표현식이 표현식의 값과 동일한지 확인합니다. (여기서 유사성은 "===" 연산자에 따라 비교됩니다.) 대소문자가 일치하면 해당 코드가 실행됩니다. 일치하는 사례가 없으면 "default:" 태그의 코드 블록을 실행합니다. "default:" 태그가 없으면 스위치는 모든 코드 블록을 건너뜁니다.

스위치 문은 매우 혼동하기 쉽습니다. 아래의 스위치 문은 지금의 if/else 문과 동일합니다.

코드 복사 코드는 다음과 같습니다.

스위치(명사) {
                     사례 1: //n ===1인 경우 여기에서 시작
//코드 블록 1 실행
휴식;
                사례 2:
//코드 블록 2 실행
휴식;
                사례 3:
//코드 블록 3 실행
휴식;
~ ~                           기본값:
//코드 블록 4 실행
휴식;
            }

각 사례 문의 끝에는 break 키워드가 사용된다는 점에 유의하세요. break 문은 나중에 소개하겠습니다. break 문은 인터프리터가 switch 문이나 루프 문에서 빠져나오게 할 수 있습니다. 스위치에서 Case는 실행될 코드의 시작점만 지정하고 끝점은 지정하지 않습니다. break 문이 없으면 switch 문은 표현식 값의 일치하는 Case 레이블에 있는 코드부터 실행을 시작하고 전체 스위치 코드 블록이 끝날 때까지 후속 문을 순차적으로 실행합니다. 물론 함수에서 switch 문을 사용하는 경우 return을 사용하여 break를 대체할 수 있습니다. return과 break는 둘 다 switch 문을 종료하는 데 사용되며 또한 하나의 Case 문이 끝난 후 다음 Case 문 블록이 계속 실행되는 것을 방지합니다. 실행.

다음 명령문은 실제에 가깝고, 유형에 따라 값을 문자열로 변환합니다.

코드 복사 코드는 다음과 같습니다.

              함수 변환(x) {
스위치(x 유형) {
case 'number': //숫자를 16진수로 변환
x.toString(16)을 반환합니다.
케이스 '문자열':
                         return '"' x '"' //큰따옴표를 사용하여 두 개의 문자열을 반환합니다.
기본값: //다른 유형을 변환하려면 일반적인 방법을 사용하세요
                                           return String(x);                 }
            }
console.log(convert(100255114)) //=>5f9c58a

위의 두 예에서 케이스 키워드 뒤에는 숫자와 문자열 리터럴이 옵니다. 실제로 이는 스위치의 가장 일반적인 사용이지만 ECMAScript 표준에서는 각 키워드 뒤에 모든 표현식이 올 수 있습니다.

switch 문은 먼저 switch 키워드 뒤의 식을 계산한 다음, Case 식의 값이 Switch 식의 값과 같아질 때까지 위에서 아래로 각 Case 뒤의 식을 계산합니다. 각 사례에 대한 일치 작업은 실제로 "==" 대신 "===" 항등 연산자 비교이므로 식과 사례 일치에 대해 유형 변환이 수행되지 않습니다.

Switch 문을 실행할 때마다 모든 Case 표현식이 실행되는 것은 아닙니다. 따라서 함수 호출 표현식, 할당 표현식 등 부작용이 있는 Case 표현식은 피해야 합니다. 가장 안전한 방법은 사례 표현식에 상수 표현식을 사용하는 것입니다.

앞서 언급한 대로 스위치 표현식이 어떤 케이스 표현식과도 일치하지 않으면 "default:"로 표시된 명령문 블록이 실행됩니다. "default:" 레이블이 없으면 전체 스위치 문을 건너뜁니다. 이전 예에서 "default:" 태그는 모든 케이스 태그 뒤에 스위치 끝에 나타납니다. 물론 이는 가장 합리적이고 일반적으로 사용되는 작성 방법입니다. 실제로 "default:" 태그는 스위치 문 내 어디에든 배치할 수 있습니다.

5. 루프.

조건문을 이해하려면 JavaScript의 코드를 분기 경로로 생각하면 됩니다. 루프 문은 코드의 일부가 반복적으로 실행될 수 있도록 하는 프로그램 경로의 루프입니다. JavaScript에는 while, do/while, for, for/in의 네 가지 유형의 루프 문이 있습니다. 다음 섹션에서는 이를 모두 한 번에 설명합니다. 가장 일반적으로 사용되는 루프는 배열 요소의 순회입니다. (7.6에서 이 루프와 배열 클래스를 사용하여 정의된 특수 루프 메서드에 대해 자세히 설명합니다.)

아이.동안

if 문은 실행 프로그램의 분기문을 선택하는 데 사용되는 기본 제어문입니다. if와 마찬가지로 while 문도 기본 루프 문입니다.

코드 복사 코드는 다음과 같습니다.
          while(표현)
성명

while 문을 실행하기 전에 JavaScript 인터프리터는 먼저 표현식의 값을 계산합니다. 해당 값이 false이면 프로그램은 루프 본문의 논리 문을 건너뛰고 프로그램의 다음 문을 실행합니다. 해당 값이 true이면 루프 본문에 있는 문의 논리가 실행된 다음 표현식 값이 계산됩니다. 루프는 표현식 값이 false가 될 때까지 계속됩니다. 즉, 표현식이 true인 경우 명령문은 루프에서 실행됩니다. while(true)을 사용하면 무한 루프가 생성됩니다.

일반적으로 우리는 자바스크립트가 동일한 작업을 반복해서 수행하는 것을 원하지 않습니다. 거의 모든 루프에서는 하나 이상의 변수가 루프를 통해 반복됩니다. 이러한 변수가 변경되기 때문에 루프에서 매번 실행되는 문의 연산도 달라집니다. 또한 변경된 변수를 표현식에 사용하면 각 루프의 표현식 값도 달라집니다. 이는 매우 중요합니다. 초기 값이 true인 표현식은 항상 true이고 루프는 절대 끝나지 않습니다. 다음 예제는 0-9 값을 출력하는 while 루프를 보여줍니다.

코드 복사 코드는 다음과 같습니다.

변수 개수 = 0;
          while (count < 10) {
console.log(개수);
백작 ;
}

이 예에서는 변수 count의 초기값이 0인 것을 알 수 있습니다. 루프 도중 루프를 10회 실행할 때마다 그 값이 1씩 증가합니다. 표현식의 값은 false로 프로그래밍되고 while은 종료되며 JavaScript 인터프리터는 프로그램의 다음 명령문을 실행합니다. 대부분의 루프에는 count와 같은 카운터 변수가 있습니다. i j k와 같은 변수 이름은 일반적으로 카운터에 사용되지만 코드를 더 쉽게 읽을 수 있도록 하려면 더 구체적인 구문 이름을 사용해야 합니다.

ii.do/while

do/while 루프는 루프의 맨 위가 아닌 끝에서 루프 표현식을 테스트한다는 점을 제외하면 while 루프와 매우 유사합니다. 즉, 루프 본문이 적어도 한 번 실행된다는 의미입니다. do/while 루프의 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.


성명
             while(표현);

do/while 루프는 while 루프만큼 일반적으로 사용되지 않습니다. 이는 실제로 루프가 적어도 한 번 실행되기를 원하는 것이 일반적이지 않기 때문입니다. 다음은 do/while 루프의 예입니다

코드 복사 코드는 다음과 같습니다.

              함수 printArray(a) {
              var len = a.길이,
                      i = 0;
만약 (len == 0)
console.log("빈 배열");
그 외 <<>                       ~하세요 {
console.log(a[i]);
                            } while ( i < len);

         }

                                           printArray([1,5,2,6])

do/while 루프와 일반 while 루프 사이에는 두 가지 구문 차이가 있습니다. 우선, do 루프는 루프의 시작을 표시하기 위해 do 키워드와 루프의 끝을 표시하고 루프 조건 판단을 입력하기 위한 while 변수가 필요합니다. 둘째, while 루프와 달리 do 루프는 다음으로 끝납니다. 세미콜론. while 루프의 본문이 중괄호로 묶인 경우 while 루프는 세미콜론으로 끝나지 않습니다.

iii.for

for문은 while보다 더 편리한 루프문 제어 구조를 제공합니다. for 문은 일반적으로 사용되는 루프 패턴을 일부 단순화합니다. 대부분의 루프에는 특정 카운터 변수가 있습니다. 루프가 시작되기 전에 이 변수를 초기화한 다음 각 루프 전에 해당 값을 확인하세요. 마지막으로 카운터 변수가 증가합니다. 그렇지 않으면 루프가 끝난 후 다음 판단 전에 수정됩니다. 이러한 유형의 루프에서 카운터의 세 가지 주요 작업은 초기화, 감지 및 업데이트입니다. for 문은 루프 구문의 일부로 이러한 세 가지 작업을 명시적으로 선언하며, 각 작업은 이를 표현하는 표현식을 사용합니다. for 문의 구문은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

for (초기화, 테스트, 증가)
성명

초기화, 테스트, 증가의 세 가지 표현식은 세미콜론으로 구분되며 초기화 작업, 루프 조건 판단, 카운터 변수 업데이트를 담당합니다. 루프의 첫 번째 줄에 배치하면 for 루프가 수행하는 작업을 더 쉽게 이해할 수 있으며 카운터 변수를 초기화하거나 증가시키는 것을 잊어버리는 일도 방지할 수 있습니다.

for 루프의 작동 방식을 설명하는 가장 쉬운 방법은 동등한 while 루프를 나열하는 것입니다

코드 복사 코드는 다음과 같습니다.

               초기화
              동안(테스트) {
성명
증분;
            }

즉, 초기화 표현식은 루프가 시작되기 전에 한 번만 실행됩니다. 초기화 표현식에는 부작용(일반적으로 할당문)이 있어야 합니다. JavaScript에서는 var 변수 선언문을 사용하여 초기화 표현식을 허용하므로 변수를 선언하고 초기화할 수 있습니다. 테스트 표현식은 각 루프 이전에 실행되며 표현식의 결과를 판단하여 루프 본문 실행 여부를 결정합니다. 각 루프 전에 테스트 표현식이 실행되고 그 결과가 루프 본문 실행으로 판단됩니다. 테스트 결과가 true이면 루프 본문의 명령문이 실행됩니다. 마지막으로 증가 표현식이 실행됩니다. 또한 유용하려면 여기의 증분 표현식에도 부작용이 있어야 합니다. 일반적으로 말하면 할당 표현식이거나 " " 및 "--" 연산자로 구성된 표현식입니다.

위의 while 루프는 for 루프를 사용하여 작성할 수 있습니다

코드 복사 코드는 다음과 같습니다.

for(var count = 0; count < 10; count )
console.log(개수)

물론 일부 루프는 더 복잡하고 여러 변수가 한 번에 반복됩니다. JavaScript에서 이 상황은 for 루프에서 사용하기 위해 초기화 표현식과 증분 표현식을 하나의 표현식으로 결합하는 쉼표 연산자를 사용해야 합니다.

코드 복사 코드는 다음과 같습니다.

            var i, j;
for (i = 0, j = 10; i < 10; i , j--)
console.log(i * j);

지금까지 예제 코드의 루프 변수는 모두 숫자였습니다. 물론 숫자는 가장 일반적으로 사용되지만 필수는 아닙니다. 다음 코드는 for 루프를 사용하여 테이블 데이터 결과를 순회하고 연결된 목록의 마지막 객체(즉, 다음 속성을 포함하지 않는 첫 번째 객체)를 반환합니다.

코드 복사 코드는 다음과 같습니다.

              function tail(o) { //연결된 리스트의 마지막 노드 객체를 반환
for (; o.next; o = o.next) /*empty*/ //o.next가 참값인지 판단하여 순회를 실행
                      반품 오;
            }

이 코드에는 초기화 표현식이 포함되어 있지 않다는 점에 유의해야 합니다. for 루프의 세 표현식 중 하나와 하나는 무시할 수 있지만 두 개의 세미콜론은 필수입니다. 테스트 표현식을 생략하면 무한 루프가 됩니다. while(ture) 유형과 유사하게 무한 루프를 작성하는 한 가지 방법은 for(;;)입니다.

iiii.for/in

for/in 문은 for 키워드를 사용하지만 일반 for 루프와는 다른 유형의 루프입니다. for/in 루프의 구문은 다음과 같습니다

코드 복사 코드는 다음과 같습니다.

for (객체의 변수)
성명

변수는 일반적으로 변수 이름이거나 lvalue를 생성할 수 있는 표현식이거나 var 문을 통해 선언된 변수일 수 있습니다. 쉽게 말하면 대입식의 왼쪽에 적용되는 값이다. object는 표현식이고, 이 표현식의 결과는 객체입니다. 마찬가지로 명령문은 루프의 본문을 구성하는 명령문 또는 명령문 블록입니다.

for 루프를 사용하여 배열 요소를 반복하는 것은 매우 간단합니다

코드 복사 코드는 다음과 같습니다.

          var a = [1, 3, 5, "44"];
for (var i = 0; i < a.length; i ) //i는 배열 요소의 인덱스를 나타냅니다.
console.log(a[i]) //각 배열의 요소를 출력합니다

for/in 루프는 객체 멤버 속성을 편리하게 탐색하는 데 사용됩니다

코드 복사 코드는 다음과 같습니다.

                 for (var p in o) //변수 p에 속성 이름 할당
console.log(o[p]); //각 속성의 값을 출력합니다

for/in 문이 실행되는 동안 JavaScript 인터프리터는 먼저 개체 표현식을 평가합니다. 표현식이 null이거나 정의되지 않은 경우 JavaScript 인터프리터는 루프를 건너뛰고 후속 코드를 실행합니다. 표현식이 기본 값과 같으면 기본 값은 해당 Waxer 개체로 변환됩니다(섹션 3.6). 그렇지 않으면 표현식 자체가 이미 객체입니다. JavaScript는 루프를 실행하기 위해 개체의 속성을 순서대로 열거합니다. 그러나 각 루프 전에 JavaScript는 변수 표현식을 평가하고 여기에 속성 이름(문자열)을 할당합니다.

for/in 루프에 있는 한 varibale의 값은 할당 표현식의 lvalue로 사용될 수 있으며 어떤 표현식이라도 될 수 있다는 점에 유의해야 합니다. 이 표현식은 루프를 통해 매번 평가됩니다. 이는 루프를 통해 매번 다른 값으로 평가될 수 있음을 의미합니다. 예를 들어 다음 코드를 사용하여 모든 객체 속성을 배열에 복사할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

          var o = {x: 1,y: 2,z: 3};
          var a = [],i = 0;
for (a[i ] in o) /*비어 있음*/;
document.write(a)//=>x,y,z

Javascript 배열은 특별한 종류의 객체이므로 for/in 루프는 객체 속성과 마찬가지로 데이터 인덱스를 열거할 수 있습니다. 예를 들어 위 코드 뒤에 이 코드를 추가하면 데이터 인덱스 0,1,2를 열거할 수 있습니다:

코드 복사 코드는 다음과 같습니다.

          var o = {x: 1,y: 2,z: 3};
          var a = [],i = 0;
for (a[i ] in o) /*비어 있음*/;
                   document.write(a)//=>               for(i in a)
                 document.write(i) //=>열거 데이터 인덱스 0 1 2

실제로 for/in 루프는 객체의 모든 속성을 순회하지 않고 "열거 가능한" 속성만 순회합니다(6.7 참조). JavaScript 언어의 핵심으로 정의된 내장 메소드는 "열거 가능"하지 않기 때문입니다. 예를 들어 모든 객체에는 toString()이 있지만 for/in 루프는 toString() 속성을 열거하지 않습니다. 내장 메소드 외에도, 열거할 수 없는(번호를 매길 수 없는) 내장 객체 속성이 많이 있습니다. 코드에 정의된 모든 속성과 메서드는 열거 가능합니다(6.7절에서 이에 대해 설명하지만 ECMAScript5에는 속성을 열거 불가능하게 만드는 특별한 수단이 있습니다).

객체는 다른 객체의 속성을 상속받을 수 있으며, 상속된 사용자 정의 속성(6.2.ii) 행도 for/in을 사용하여 열거할 수 있습니다.

for/in 루프 본문이 아직 열거되지 않은 속성을 삭제하면 이 속성은 더 이상 열거되지 않습니다. 루프 본문이 객체의 새 속성을 정의하는 경우 이러한 속성은 일반적으로 열거되지 않습니다. 그러나 일부 JavaScript 구현에서는 루프 본문에 추가된 속성을 열거할 수 있습니다.

속성 열거 순서

ECMAScript 사양은 for/in 루프가 객체의 속성을 열거하는 순서를 지정하지 않습니다. 그러나 실제로 주류 브라우저 제조업체의 JavaScript 구현은 정의된 순서대로 간단한 객체의 속성을 열거하며, 먼저 정의된 속성이 먼저 열거됩니다. 객체 리터럴 형식을 사용하여 객체를 생성하는 경우 리터럴의 속성은 나타나는 순서대로 열거됩니다. (일부 웹사이트와 JavaScript 라이브러리는 이 열거 순서를 따르며 대부분의 브라우저 제조업체는 이 순서를 수정하지 않습니다.) 다음의 경우 열거 순서는 특정 구현(대화형이 아님)에 따라 달라집니다.
1. 객체는 열거 가능한 속성을 상속받습니다
2. 객체에는 정수 배열 인덱스가 있는
속성이 있습니다. 3. 객체의 기존 속성을 삭제하려면 삭제를 사용하세요
4. Object.defineProperty() 또는 유사한 메서드를 사용하여 개체 속성을 변경합니다.

6. 점프

JavaScript의 첫 번째 문 유형은 점프 문입니다. 명령문 이해를 통해 자바스크립트 실행이 한 위치에서 다른 위치로 점프되도록 할 수 있습니다.

break 문은 루프나 다른 문의 끝으로 점프합니다. continue 문은 이 루프의 실행을 종료하고 다음 루프의 실행을 시작합니다. JavaScript의 명령문은 이름을 지정하거나 레이블을 지정할 수 있으며, 중단 및 계속은 대상 루프 또는 기타 명령문 레이블을 식별할 수 있습니다.

return 문을 사용하면 인터프리터가 함수 본문 실행에서 벗어날 수 있습니다. 그리고 이 호출의 반환 값을 제공합니다. throw 문은 예외를 트리거하거나 발생시킵니다. 이는 예외 처리를 위한 코드 논리를 지정하는 try/catch/finally 문과 함께 사용됩니다. 이것은 복잡한 점프 문입니다. 예외가 발생하면 프로그램은 가장 가까운 닫힌 예외 스타로 점프합니다. 이 예외 프로그램은 동일한 함수 또는 상위 수준 호출 스택에 있을 수 있습니다.

다음으로 각 점프 문 유형을 설명하세요

i.태그문

명령문에 레이블을 지정할 수 있습니다. 레이블은 명령문 앞의 식별자와 콜론으로 구성됩니다.

식별자:문

문에 대한 레이블을 정의하면 프로그램 어디에서나 레이블 이름을 통해 문을 참조할 수 있습니다. 여러 명령문에 대해 레이블을 정의할 수 있지만 루프나 조건문과 같은 명령문 블록에 대한 레이블을 정의할 때 더 유용합니다. 루프에 대한 레이블 이름을 정의하면 루프 본문 내에서 break 및 continue를 사용하여 루프를 종료하거나 다음 루프의 시작을 직접 확인할 수 있습니다. break와 continue는 명령문 레이블을 사용할 수 있는 JavaScript의 유일한 명령문입니다(이 장에서 다음에 설명함). 다음 예에서 while 루프는 레이블을 정의하고 continue 문은 이 레이블을 사용합니다.

코드 복사 코드는 다음과 같습니다.

               메인루프: while (토큰 != null) {
//이 코드는 무시하세요...
계속 mapoop; // 다음 루프로 점프
//여기의 코드는 무시하세요...
            }

여기서 태그로 사용되는 식별자는 예약어가 아닌 합법적인 JavaScript 식별자여야 합니다. 레이블의 네임스페이스는 변수 또는 함수의 네임스페이스와 다르므로 명령문 레이블 및 변수 또는 함수 이름과 동일한 식별자를 사용할 수 있습니다. 명령문 레이블은 해당 명령문 내에서만(또는 해당 절 내에서) 정의됩니다. 명세서 라벨은 내부 명세서 라벨과 동일한 이름을 가질 수 없지만 두 코드가 서로 중첩되지 않은 경우 동일한 이름의 명세서 라벨이 나타날 수 있습니다. 레이블이 있는 문에는 레이블도 지정할 수 있습니다. 즉, 모든 문에 여러 개의 레이블이 있을 수 있습니다.

ii.break

break 문만 사용하는 기능은 메모리가 가장 많은 루프나 스위치 문을 즉시 종료하는 것입니다. 구문은 다음과 같습니다.

휴식;

루프 및 스위치 문이 종료될 수 있으므로 이러한 형태의 중단은 해당 문에서만 허용됩니다.
우리는 이미 switch 문 예제에서 break 문을 보았습니다. 루프에서 어떤 이유로든 전체 루프를 계속 실행하고 싶지 않은 경우 break를 사용하여 일찍 종료할 수 있습니다. 루프 종료 조건이 매우 복잡한 경우, 복잡한 종료 조건을 루프 표현식에 직접 작성하는 것보다 함수 본문에서 break 문을 사용하여 이러한 조건 판단을 구현하는 것이 훨씬 간단합니다.

다음 예에서는 루프가 전체 배열 요소를 순회하여 특정 값을 찾습니다. 전체 배열 순회가 완료되면 찾으려는 배열 요소가 발견되면 break 문을 사용하여 루프가 정상적으로 종료됩니다. 루프:

코드 복사 코드는 다음과 같습니다.

for (var i = 0; i < a.length; i ) {
If (a[i] == 대상) break;
}

JavaScript에서는 break 키워드 뒤에 명령문 레이블이 올 수 있습니다(식별자만 가능, 콜론 없음).

브레이크 라벨 이름;

break를 레이블과 함께 사용하면 프로그램은 레이블이 식별하는 명령문 블록의 끝으로 점프하거나 닫힌 명령문 블록의 실행을 직접 종료합니다. 중단 레이블을 지정하는 둘러싸는 명령문 블록이 없으면 구문 오류가 발생합니다. 이러한 형식의 break 문을 사용할 때 레이블이 있는 문은 루프나 스위치 문이 아니어야 합니다. 왜냐하면 break 문은 둘러싸는 문 블록에서 "점프 아웃"될 수 있기 때문입니다. 여기의 명령문은 명령문 그룹을 식별하기 위해 동일한 레이블을 사용하여 중괄호로 그룹화된 명령문 그룹일 수 있습니다.

break 키워드와 라벨 이름 사이에는 줄바꿈을 사용할 수 없습니다. JavaScript는 문장에서 생략된 세미콜론을 자동으로 완성할 수 있기 때문에, break 키워드와 레이블 사이에 개행 문자가 있으면 JavaScript 인터프리터는 레이블 없이 가장 간단한 형태의 break를 사용하고 있다고 생각하여 break 뒤에 세미콜론을 추가합니다.
인접하지 않은 루프 또는 스위치 문에서 벗어나려면 레이블이 있는 break 문을 사용합니다. 샘플 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

          var Matrix = getData(); //어딘가에서 2차원 배열 가져오기
//행렬의 모든 요소를 ​​합산합니다
      var sum = 0,
              성공 = 거짓;
​​​​ //오류가 보고되면 프로그램을 실행하기 위해 서명부터 시작합니다.
Compure_sum: if (행렬) {
for (var x = 0; x < 행렬.길이; x ) {
                  var 행 = 행렬[x];
(!row)가 계산을 중단하는 경우;
for (var y = 0; y                       var cell = 행[y];
If (isNaN(cell)) break Compute_sum;
                     합계 = 셀;
                 }
                }
                      성공 = true;
            }
​​​​​​ //break 문이 여기로 점프합니다
//success =false 조건이 여기에 도달하면 우리가 제공한 행렬에 오류가 있음을 의미합니다.
//그렇지 않으면 행렬의 모든 요소를 ​​합산합니다

마지막으로, break 문에 레이블이 지정되어 있는지 여부에 관계없이 해당 제어는 함수의 경계를 넘을 수 없다는 점에 유의해야 합니다. 예: 레이블이 있는 함수 정의문의 경우 이 레이블을 사용하여 함수 내부를 통해 함수 외부로 이동할 수 없습니다.

iii.계속문

continue 문은 break 문과 매우 유사하지만 루프를 종료하지 않고 대신 다음 루프를 실행합니다. continue 문의 구문은 break 문의 구문만큼 간단합니다

계속;

continue 문에도 태그가 있습니다

계속 이름;

continue 문에 레이블이 있는지 여부에 관계없이 루프 본문에서만 사용할 수 있습니다. 다른 곳에서 사용하면 구문 오류가 보고됩니다.
continue 문이 실행되면 현재 루프 논리가 종료되고 다음 루프가 즉시 실행됩니다. 다양한 루프 유형에서는 continue 동작도 다릅니다
1. while 루프에서는 루프 시작 부분에 표현식을 지정하여 반복적으로 테스트합니다. 테스트 결과가 true이면 루프 본문이 처음부터 실행됩니다.
2. do/while 루프에서 프로그램 실행은 루프 끝으로 점프합니다. 이때 루프 조건은 다음 루프로 계속되기 전에 다시 판단됩니다.
3. for 루프에서는 자동 증가 표현식을 먼저 계산한 후 테스트 표현식을 감지하여 루프 본문 실행 여부를 결정합니다.
4. for/in 루프에서 루프는 지정된 변수에 할당된 다음 속성 이름을 순회하기 시작합니다.

while 루프와 for 루프의 continue 문 차이에 주의해야 합니다. while 루프는 루프 조건 판단의 다음 라운드에 직접 들어가지만 for 루프는 먼저 증분식을 계산한 후 루프 조건을 판단합니다. . 이전 장에서는 for 루프와 while 루프의 "동등한" 동작을 논의했습니다. 그러나 이 두 루프에서는 continue가 다르게 동작하기 때문에 while 루프를 사용하여 동일한 for 루프를 완벽하게 시뮬레이션하는 것은 불가능합니다.

다음 코드는 오류가 발생할 때 현재 루프의 후속 논리를 건너뛰는 레이블이 없는 continue 문을 보여줍니다.

코드 복사 코드는 다음과 같습니다.

for (i = 0; i If (!data[i]) continue; //정의되지 않은 데이터를 처리할 수 없습니다
                  합계 = 데이터[i];
            }

break 문과 유사하게 레이블이 지정된 continue 문을 중첩 루프에서 사용하여 계층적으로 중첩된 루프 본문 논리에서 벗어날 수 있습니다. 또한 break 문과 유사하게 continue 문과 labname 사이에 개행 문자를 사용할 수 없습니다.

iiii.반환

함수 호출은 표현식이며 모든 표현식에는 값이 있다는 점을 기억하세요. 함수의 return 문은 함수 호출 후 반환 값을 나타냅니다. return 문의 구문은 다음과 같습니다.

반환 표현식;

return 문은 함수 본문에만 나타날 수 있습니다. 그렇지 않으면 구문 오류가 보고됩니다. return 문이 실행되면 함수는 실행을 종료하고 호출 프로그램에 표현식의 값을 반환합니다. 예:

코드 복사 코드는 다음과 같습니다.

              function square(x) {return x * x} //return을 포함하는 명령문 함수
                 square(4) //실행 횟수는 16

return 문이 없으면 함수 호출은 함수 본문의 각 문을 함수가 끝날 때까지 순서대로만 실행하고 마지막으로 호출 프로그램으로 돌아갑니다. 이 경우 표현식 호출 결과는 정의되지 않습니다. return 문은 함수의 마지막 문으로 나타나는 경우가 많지만, return 문이 실행될 때 실행되지 않은 코드가 많다고 해서 반드시 함수의 끝에 위치해야 한다는 의미는 아닙니다. , 함수는 여전히 호출 프로그램으로 돌아갑니다.
return 문은 표현식 없이 단독으로 사용할 수 있습니다. 이 경우 함수는 프로그램을 호출하고 정의되지 않은 상태를 반환하려고 합니다.

코드 복사 코드는 다음과 같습니다.
//매개변수가 null이거나 정의되지 않은 경우 즉시 반환
(!o) 반환하면;
~ |

JavaScript는 자동으로 세미콜론을 삽입할 수 있으므로 return 키워드와 그 뒤의 표현식 사이에 개행 문자를 사용할 수 없습니다.

iiiiii.throw 문

소위 예외(Exception)는 어떤 비정상적인 상황이나 오류가 발생할 때 발생하는 신호입니다. 예외를 던진다는 것은 오류나 비정상적인 상황이 발생했다는 신호를 보내는 것을 의미합니다. 예외를 잡는다는 것은 신호를 처리하고 예외를 던지는 것을 의미하는데, 이는 오류나 비정상적인 상황이 발생했음을 신호로 알리는 것입니다. 예외 포착은 이 신호를 처리하는 것, 즉 예외로부터 복구하기 위해 필요한 조치를 취하는 것을 의미합니다. JavaScript에서는 런타임 오류가 발생하거나 프로그램이 throw 문을 사용할 때 명시적으로 예외가 발생합니다. 다음 섹션에서 자세히 소개할 try/catch/finally 문을 사용하여 예외를 포착할 수 있습니다.

throw 문의 구문은 다음과 같습니다.


던지기 표현

표현식의 값은 어떤 유형이든 가능합니다. 오류 코드를 나타내는 배열이나 오류 메시지가 포함된 문자열을 던질 수 있습니다. JavaScript 인터프리터가 예외를 발생시키면 일반적으로 Eeeor 유형 또는 해당 하위 유형을 사용하지만 사용할 수도 있습니다. 오류 개체에는 오류 유형에 대한 친숙한 표현과 문자열을 생성자에 전달하는 데 사용되는 메시지 속성이 있습니다(3부의 Error 클래스 참조). 다음 예제에서는 함수가 불법으로 호출되면 오류가 발생합니다. 매개변수 개체:

함수 fa(x) {
 
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.