자바스크립트 구문

JavaScript syntax
키워드가 다른 색상으로 강조 표시된 자바스크립트 코드의 일부분

자바스크립트 구문은 정확하게 구조화된 자바스크립트 프로그램을 정의하는 규칙 집합입니다.

아래 예들은 표준 텍스트 출력을 위해 대부분의 브라우저에 있는 콘솔 개체의 로그 기능을 사용합니다.

자바스크립트 표준 라이브러리에는 공식적인 표준 텍스트 출력 기능이 없습니다.document.write). 자바스크립트는 현대의 웹브라우저 내에서 클라이언트측 스크립팅에 주로 사용되고 있고, 거의 모든 웹브라우저가 경보기능을 제공하고 있는 점을 고려하면,alert사용할 수도 있지만 일반적으로 사용하지는 않습니다.

오리진스

Brendan Eich는 자바스크립트 1.1[1][2] 사양의 첫 단락에서 구문의 계통을 다음과 같이 요약했습니다.

자바스크립트는 대부분의 구문을 자바로부터 빌려오지만, 오브젝트 프로토타입 시스템에서 Self의 간접적인 영향을 받아 AwkPerl로부터도 이어받습니다.

기초

대소문자 구분

자바스크립트는 대소문자를 구분합니다.생성자이름은 대문자로 시작하고 함수 또는 변수의 이름은 소문자로 시작하는 것이 일반적입니다.

예:

변태의 a = 5; 위로의.로그.(a); // 5 위로의.로그.(A); // ReferenceError를 던집니다. A이(가) 정의되지 않았습니다. 

공백 및 세미콜론

C와는 달리 자바스크립트 소스의 공백은 의미론에 직접적인 영향을 미칠 수 있습니다.자바스크립트에서 세미콜론이 문을 종료합니다.자동 세미콜론 삽입(ASI)으로 인해 새 줄을 구문 분석할 때 잘 형성되는 일부 문은 새 줄 바로 앞에 세미콜론을 삽입한 것처럼 완전한 것으로 간주됩니다.자동 세미콜론 [3]삽입으로 인해 의도하지 않은 영향을 줄일 수 있으므로 문 종료 세미콜론을 명시적으로 제공하는 것이 좋습니다.

두 가지 문제가 있습니다. 5개의 토큰은 문장을 시작하거나 완전한 문장의 확장이 될 수 있습니다. 그리고 5개의 제한된 프로덕션은 특정 위치에서 줄 바꿈이 허용되지 않아 잘못된 구문 분석이 발생할 수 있습니다.

문제가 있는 5개의 토큰은 열린 괄호입니다."(", 브래킷 열기 "[", 슬래시(slash/", 게다가"+", 그리고 마이너스"-". 이 중 열린 괄호는 즉시 호출된 함수 표현 패턴에서 일반적이며, 열린 괄호는 때때로 발생하지만 다른 괄호는 매우 드물기도 합니다.예:

a = b + c (d + e).푸우()  // 다음과 같이 처리됨: //  a = b + c (d + e)푸우(foo(); 

앞의 진술을 세미콜론으로 종료할 것을 제안합니다.

일부에서는 대신 '로 시작하는 줄에 선두 세미콜론을 사용할 것을 제안합니다.(' 아니면 '[', 그래서 그 라인은 실수로 이전 라인과 결합되지 않았습니다.이를 방어 세미콜론이라고 하며 코드를 재배열할 때 코드가 모호해질 수 있으므로 특히 권장합니다.예를 들어,

a = b + c ;(d + e).푸우()  // 다음과 같이 처리됨: //  a = b + c; //  (d + e).푸우(foo(); 

초기 세미콜론은 후행 세미콜론을 생략한 다른 라이브러리에 추가되는 경우에도 자바스크립트 라이브러리의 시작 부분에 사용되기도 하는데, 이는 초기 문이 모호해질 수 있기 때문입니다.

5개의 제한된 생산은return,throw,break,continue, 수술 후/퇴원 후.모든 경우에 세미콜론을 삽입한다고 문제가 해결되는 것은 아니지만 구문 분석된 구문이 명확해져 오류를 쉽게 탐지할 수 있습니다.return그리고.throw선택적 값을 취합니다.break그리고.continue임의 라벨을 찍습니다.어떤 경우에도 값이나 라벨을 문장과 동일한 선에 유지하는 것이 좋습니다.이는 반환 문에 나타나는 경우가 많은데, 큰 개체 리터럴을 반환하고 실수로 새 줄에서 시작할 수 있습니다.증가/감소 후의 경우, 증가/감소 전과 함께 잠재적인 모호성이 있으며, 다시 한 번 이들을 동일한 선에서 유지하는 것이 좋습니다.

돌아가다 a + b;  // 정의되지 않은 값을 반환합니다.다음과 같이 처리됨: //   반환; //   a + b; // 다음과 같이 적어야 합니다. //   a + b를 반환합니다. 

평.

주석 구문은 C++, Swift 및 기타 많은 언어와 동일합니다.

// 짤막하고 한 줄짜리 논평  /* 긴 대사의 댓글입니다. 제 대본에 대해서.언젠가는. 훌륭합니다. */  /* 주석 /*은 중첩되지 않을 수 있습니다 */ 구문 오류를 */ 

변수

표준 자바스크립트의 변수들은 종류가 없으므로, 임의의 값( 값은 종류가 있음)을 임의의 변수에 저장할 수 있습니다.언어의 6번째 버전인 ES6부터 변수는 다음과 같이 선언될 수 있습니다.var함수 범위 변수의 경우let아니면const블록 수준 변수에 대한 값입니다.ES6 이전에는 변수를 다음과 같이만 선언할 수 있었습니다.var진술.선언된 변수에 할당된 값const변경할 수는 없지만 해당 속성은 변경할 수 있습니다.var이후로 더 이상 사용되지 않아야 합니다.let그리고.const현대 [4]브라우저에서 지원됩니다.변수의 식별자는 문자, 밑줄()로 시작해야 합니다._, 또는 달러 기호()$), 후속 문자는 숫자()일 수도 있습니다.0-9자바스크립트는 대소문자를 구분하기 때문에 대문자 "A"~"Z"는 소문자 "a"~"z"와 다릅니다.

자바스크립트 1.5, ISO 8859-1 또는 유니코드 문자(또는\uXXXX유니코드 탈출 시퀀스)를 식별자에 [5]사용할 수 있습니다.특정 자바스크립트 구현에서는 식별자에 at 기호(@)를 사용할 수 있지만 이는 사양과 반대이며 새로운 [citation needed]구현에서는 지원되지 않습니다.

스코핑 및 호이스트

다음과 같이 선언된 변수var기능 수준에서 사전적으로 범위가 지정된 반면에let아니면const블록 레벨 범위를 갖습니다.선언은 코드가 실행되기 전에 처리되기 때문에 [6]코드에 선언되기 전에 변수를 할당하여 사용할 수 있습니다.이를 호스팅(hoisting)이라고 하며, 함수 또는 [7]블록의 맨 위에 앞으로 선언되는 변수와 같습니다.

와 함께var,let,그리고.const문장(statements), 선언만 호스팅되고, 할당은 호스팅되지 않습니다.따라서 a.var x = 1함수 중간에 있는 문장은 a와 동등합니다.var x함수의 맨 위에 선언문이 있고, 그리고.x = 1함수 중간에 있는 해당 지점의 할당 문입니다.이는 값이 선언되기 전에는 접근할 수 없으며 순방향 참조가 불가능하다는 것을 의미합니다.와 함께var변수의 값은undefined초기화 될 때까지.다음과 같이 선언된 변수let아니면const초기화되기 전에는 액세스할 수 없으므로 이전에 해당 변수를 참조하면 오류가 발생합니다.

변수를 선언하고 그에 함수를 부여하는 함수 선언은 변수 선언과 유사하지만 선언을 고양하는 것 외에,또한 전체 문장이 포함된 함수의 맨 위에 나타나는 것처럼 과제를 들어올립니다. 따라서 앞으로의 참조도 가능합니다. 엔클로저 함수 내에서 함수 문장의 위치는 무관합니다.이것은 a의 변수에 할당된 함수식과는 다릅니다.var,let, 아니면const진술.

예를 들면,

변태의 장난을 치다 = 기능.() { .. } // 선언문만 게시됩니다. 기능. 장난을 치다() { .. } // 선언과 과제가 제기됩니다. 

블록 범위 지정은 전체 블록을 함수로 감싼 후 실행함으로써 생성할 수 있습니다(즉시 호출된 함수 표현 패턴이라고 함). 또는 변수를 사용하여 선언함으로써 생성할 수 있습니다.let키워드.

선언 및 할당

범위 밖에 선언된 변수는 전역 변수입니다.상위 범위에 변수가 선언되면 하위 범위에서 변수에 액세스할 수 있습니다.

JavaScript가 식별자를 확인하려고 하면 로컬 범위를 찾습니다.이 식별자를 찾을 수 없으면 다음 외부 범위를 탐색하고 전역 변수가 있는 전역 범위에 도달할 때까지 범위 체인을 따라 탐색합니다.만약 여전히 찾지 못한다면, 자바스크립트는 a를 올릴 것입니다.ReferenceError예외.

식별자를 할당할 자바스크립트는 이 식별자를 검색하기 위해 정확히 동일한 과정을 거칩니다. 다만 전역 범위에서 찾을 수 없는 경우에는 해당 식별자가 [8]생성된 범위에 "변수"를 생성한다는 점을 제외하고 말입니다.따라서 선언되지 않은 변수가 할당된 경우 전역 변수가 됩니다.변수 선언(키워드 사용)var전역 범위(즉, 임의의 함수 본문 외부(또는 let/const의 경우 블록)에서 선언되지 않은 식별자를 할당하거나 전역 개체(일반적으로 창)에 속성을 추가하면 새 전역 변수도 생성됩니다.

JavaScript의 엄격한 모드는 선언되지 않은 변수의 할당을 금지하므로 전역 네임스페이스 오염을 방지합니다.

다음은 변수 선언 및 범위의 몇 가지 예입니다.

변태의 x1 = 0; // 함수가 없으므로 전역 변수입니다. 허락하다 x2 = 0; // 또한 글로벌, 이번에는 블록에 없기 때문에  기능. f() {   변태의 z = '미친', r = '새'; // 2개의 국소 변수   m = '물고기'; // 전에는 어디에서도 선언되지 않았기 때문에 전세계적으로    기능. 어린아이() {     변태의 r = '미친'; // 이 변수는 로컬 변수이며 상위 함수의 "bird" r에 영향을 주지 않습니다.     z = '미친'; // 닫힘:자식 함수는 부모 함수의 변수에 접근할 수 있습니다.   }    20 = 20; // 이 변수는 다음 줄에 선언되지만, 여기와 같이 함수의 어느 곳에서나 사용할 수 있습니다.   변태의 20;    어린아이();   돌아가다 x1 + x2; // 우리는 여기서 x1과 x2를 사용할 수 있습니다. 왜냐하면 그것들은 세계적이기 때문입니다. }  f();  위로의.로그.(z); // z 값을 더 이상 사용할 수 없으므로 이 줄은 ReferenceError 예외를 발생시킵니다. 
위해서 (허락하다 i = 0; i < 10; i++) 위로의.로그.(i); 위로의.로그.(i); // ReferenceError를 던집니다. i가 정의되지 않았습니다. 
위해서 (머리를 짜다 i = 0; i < 10; i++) 위로의.로그.(i); // TypeError를 던집니다.상수 변수에 할당  위해서 (머리를 짜다 i  [1,2,3]) 위로의.로그.(i); //예외를 제기하지 않습니다.i는 재할당되지 않지만 모든 반복에서 다시 생성됩니다.  머리를 짜다 파이; // 구문 오류: const 선언에 초기화기 누락을 던집니다. 

원시 데이터 유형

자바스크립트 언어는 6가지 원시 데이터 유형을 제공합니다.

  • 미정의
  • 번호
  • 빅인트
  • 부울
  • 기호.

원시 데이터 유형 중 일부는 유형 경계의 범위를 나타내는 명명된 값 집합도 제공합니다.이러한 명명된 값은 아래의 적절한 섹션에 설명되어 있습니다.

미정의

"undefined" 초기화되지 않은 모든 변수에 할당되며, 존재하지 않는 개체 속성을 확인할 때도 반환됩니다.부울 컨텍스트에서 정의되지 않은 값은 false 값으로 간주됩니다.

참고: 정의되지 않은 것은 진짜 원시 유형으로 간주됩니다.명시적으로 변환되지 않는 한, 정의되지 않은 값은 논리적 컨텍스트에서 false로 평가되는 다른 유형과 비교하여 예기치 않게 동작할 수 있습니다.

허락하다 시험;                         // 선언되었지만 정의되지 않은 변수...                                   // ... 정의되지 않은 값으로 설정 머리를 짜다 테스트오브제 = {}; 위로의.로그.(시험);                // test 변수는 있지만 값은 없습니다...                                   // ...정의됨, 정의되지 않음 표시 위로의.로그.(테스트오브제.마이프롭);      // testObj는 존재하고 속성은 존재하지 않습니다. ...                                   // ... 정의되지 않은 표시 위로의.로그.(미정의 == 귀무의);   // 검사 중 강제되지 않은 유형, true로 표시 위로의.로그.(미정의 === 귀무의);  // 검사 중 유형 적용, false 표시 

참고: 정의되지 않은 언어 리터럴에 대한 내장 언어 리터럴이 없습니다.따라서(x === undefined)ECMA스크립트 5 이전 버전에서는 누군가가 작성하는 것이 합법적이기 때문에 변수가 정의되지 않았는지 확인하는 것이 완벽한 방법은 아닙니다.var undefined = "I'm defined now";. 보다 강력한 접근 방식은 다음과 같은 방법을 사용하여 비교하는 것입니다.(typeof x === 'undefined').

이와 같은 기능은 예상대로 작동하지 않습니다.

기능. isUndefined(x) { 허락하다 u; 돌아가다 x === u; }             // 이렇게... 기능. isUndefined(x) { 돌아가다 x === 공허한 0; }               // ...아니면 그 두번째 것이 기능. isUndefined(x) { 돌아가다 (유형의 x) === "정의되지 않음"; } // ...아니면 그 세번째 놈이 

여기, 전화하기isUndefined(my_var)키우다my_var가 알 수 없는 식별자인 경우 ReferenceError 반면,typeof my_var === 'undefined'Doesn't.

번호

숫자는 IEEE 754 부동 소수점이 두 배로 증가함에 따라 이진법으로 표시됩니다.이 형식은 16자리에 가까운 정확도를 제공하지만 분수를 포함하여 항상 실수를 정확하게 나타낼 수는 없습니다.

숫자를 비교하거나 형식을 지정할 때 이 문제가 발생합니다.예를 들어,

위로의.로그.(0.2 + 0.1 === 0.3); // false를 표시 위로의.로그.(0.94 - 0.01);       // 0.9299999999999를 표시합니다. 

따라서 출력용으로 포맷될 때마다 To Fixed() 메서드와 같은 루틴을 사용하여 숫자를 반올림해야 합니다.

숫자는 다음 표기법 중 하나로 지정할 수 있습니다.

345;    // 자바스크립트에는 숫자 타입이 하나밖에 없지만, "정수" 34.5;   // 부동 소수점 번호 3.45e2; // 345에 해당하는 또 다른 부동소수점 0b1011; // 11과 같은 이진 정수 0o377;   // 255와 같은 팔분의 정수 0xFF;   // 255와 같은 16진수, 숫자는 ...로 표시됩니다.         // ... 문자 A-F는 대문자 또는 소문자일 수 있습니다. 

ES2021에 도입된 숫자 구분 기호 _(밑줄)도 있습니다.

// 참고:위키백과 구문에서는 아직 숫자 구분자를 지원하지 않습니다. 1_000_000_000;    // 큰 숫자와 함께 사용됩니다. 1_000_000.5;      // 소수점 지원 1_000e1_000;      // 지수로 지원  // 이진법, 팔진법 및 육각형 지원 0b0000_0000_0101_1011; 0o0001_3520_0237_1327; 0xFFFF_FFFF_FFFFE;  // 그러나 숫자가 아닌 숫자 부분 옆이나 시작 또는 끝에는 사용할 수 없습니다. _12; // 변수가 정의되지 않았습니다(밑줄로 인해 변수 식별자가 됨). 12_; // 구문 오류(숫자 끝에 있을 수 없음) 12_.0; // 구문 오류(소수점 옆에 구분자를 두는 것은 의미가 없습니다.) 12._0; // 구문 오류 12e_6; // 구문 오류("e" 옆), 숫자가 아닙니다.처음에 구분자를 넣는 것은 말이 안 됩니다) 1000____0000; // 구문 오류(숫자가 아닌 "_" 옆에 있음).한 번에 한 개의 분리기만 허용됩니다. 

숫자 유형의 익스텐트 +, -∞, NaN(Not a Number)은 다음 두 가지 프로그램 식을 통해 얻을 수 있습니다.

Infinity; // 양의 무한대(예를 들어 -Infinity와 함께 음수 획득) NaN;      // Not-A-Number 값은 또한 ...에서 오류로 반환되었습니다.           // ... 문자열 대 숫자 변환 

인피니티와 NaN은 숫자입니다.

유형의 Infinity;   // "number"를 반환합니다. 유형의 NaN;        // "number"를 반환합니다. 

이 세 가지 특수 값은 IEEE-754가 설명하는 대로 대응하고 작동합니다.

Number 생성자(함수로 사용됨) 또는 단항 + 또는 -를 사용하여 명시적인 숫자 변환을 수행할 수 있습니다.

머리를 짜다 마이스트링 = "123.456"; 머리를 짜다 마이넘버1 = 번호(마이스트링); 머리를 짜다 내넘버2 = +마이스트링; 

생성자로 사용하면 숫자 래퍼 개체가 생성됩니다(비록 쓸모는 없지만).

머리를 짜다 나의 숫자 보따리 = 신규 번호(123.456); 

그러나 NaN은 그 자체와 동일하지 않습니다.

머리를 짜다 난의 = NaN; 위로의.로그.(NaN == NaN);        // 거짓의 위로의.로그.(NaN === NaN);       // 거짓의 위로의.로그.(NaN !== NaN);       // 참다운 위로의.로그.(난의 !== 난의);       // 참다운  // isNaN 메서드를 사용하여 NaN을 확인할 수 있습니다. 위로의.로그.(isNaN("NaN으로 변환"));     // 참다운 위로의.로그.(isNaN(NaN));                    // 참다운 위로의.로그.(번호.isNaN("변환되지 않음")); // 거짓의 위로의.로그.(번호.isNaN(NaN));             // 참다운 

빅인트

BigInt는 임의로 큰 정수에 사용할 수 있습니다.특히 자바스크립트 중 가장 큰 2 - 1보다 큰 정수는53 안정적으로 Number primitive로 표현할 수 있고 Number로 표현할 수 있습니다.MAX_SAFE_INTEGER 상수.

BigInt를 분할할 때 결과가 잘립니다.

자바스크립트의 문자열은 문자의 시퀀스입니다.자바스크립트에서 문자열은 일련의 문자를 더블(") 또는 싱글('') 따옴표 사이에 배치하여 리터럴로 직접 만들 수 있습니다.이러한 문자열은 한 줄에 작성해야 하지만 탈출된 줄 문자(예: \n)를 포함할 수 있습니다.자바스크립트 표준은 백쿼트 문자('', 중대한 악센트 또는 백틱)가 여러 줄의 문자 문자열을 따옴표로 만들 수 있도록 허용하지만, 이것은 2016년 현재 파이어폭스와 크롬 같은 특정 브라우저에서만 지원되고 인터넷 익스플로러 [9]11에서는 지원되지 않습니다.

머리를 짜다 인사 = "안녕, 세상이여!"; 머리를 짜다 다른인사 = '지구인 여러분, 인사드립니다.'; 

문자열 내의 개별 문자는 charAt 메서드(String.prototype에서 제공)를 사용하여 액세스할 수 있습니다.이 방법은 문자열 내의 개별 문자에 액세스할 때 선호되는 방법이며, 이는 비현대 브라우저에서도 작동하기 때문입니다.

머리를 짜다 h = 인사.charat(0); 

현대 브라우저에서 문자열 내의 개별 문자는 배열과 동일한 표기법을 통해 접근할 수 있습니다.

머리를 짜다 h = 인사[0]; 

그러나 자바스크립트 문자열은 불변입니다.

인사[0] = "H"; // 실패. 

두 문자열에 등호 연산자("==")를 적용하면 문자열의 내용이 동일한 경우 true가 반환됩니다. 즉, 길이가 같고 문자 시퀀스가 동일한 경우(알파벳의 경우 대소문자가 중요함).따라서:

머리를 짜다 x = "세계"; 머리를 짜다 비교 1 = ("안녕하세요." + x == "안녕, 세상이여); // 여기서 compare1은 true를 포함합니다. 머리를 짜다 비교하다 2 = ("안녕하세요." + x == "안녕, 세상"); // 여기 compare2는 다음을 포함합니다.                                                     // ...그 이후로 거짓...                                                     // 첫번째 등장인물들...                                                     // 두 피연산자 모두...                                                     // ...같은 경우가 아닙니다. 

동일한 형식의 따옴표는 이스케이프하지 않는 한 중첩할 수 없습니다.

허락하다 x = "안녕, 세상에!" 라고 그가 말했습니다.; // 괜찮아요. x = ""안녕하세요., 세계!" 그가 말했습니다."; //  별로예요. x = "\"안녕, 세상이여!\" 그가 말했습니다."; // \"와 함께 탈출하여 작업합니다. 

문자열 생성기는 문자열 개체( 문자열을 감싼 개체)를 만듭니다.

머리를 짜다 인사 = 신규 ("안녕, 세상이여!"); 

이러한 개체에는 값Of 메서드가 포함되어 있으며 이 개체 내에 래핑된 기본 문자열을 반환합니다.

머리를 짜다 s = 신규 ("안녕하세요!"); 유형의 s; // 'object'입니다. 유형의 s.의 값(); // string입니다. 

문자열 개체 간의 동일성은 문자열 프리미티브와 같이 동작하지 않습니다.

머리를 짜다 s1 = 신규 ("안녕하세요!"); 머리를 짜다 s2 = 신규 ("안녕하세요!"); s1 == s2; // 거짓입니다. 두 개의 다른 개체이기 때문입니다. s1.의 값() == s2.의 값(); // 사실입니다. 

부울

자바스크립트는 참 및 거짓 리터럴을 가진 부울 데이터 형식을 제공합니다.연산자 유형은 이러한 원시 유형에 대해 "boolean" 문자열을 반환합니다.논리적 컨텍스트에서 사용할 경우 0, -0, null, NaN, 정의되지 않음 및 빈 문자열("")은 자동 형식 변환으로 인해 false로 평가됩니다.문자열 "0", "false" 및 임의의 개체를 포함한 다른 모든 값(이전 목록의 보완)은 true로 평가됩니다.

활자변환

균등성 비교 연산자에 의한 자동 형식 강제 (==그리고.!=)는 유형확인된 비교 연산자를 사용하여 피할 수 있습니다 (===그리고.!==).

형식 변환이 필요한 경우, JavaScript는 Boolean, Number, String 또는 Object 피연산자를 [10]다음과 같이 변환합니다.

숫자와 문자열
문자열은 숫자 값으로 변환됩니다.자바스크립트는 문자열 숫자 리터럴을 숫자 유형 값으로 변환하려고 시도합니다.먼저, 수학적 값은 문자열 숫자 리터럴에서 유도됩니다.그런 다음 이 값을 가장 가까운 숫자 유형 값으로 반올림합니다.
부울
피연산자 중 하나가 부울이면 부울 피연산자가 이면 1로, 거짓이면 0으로 변환됩니다.
물건
개체를 숫자 또는 문자열과 비교하면 자바스크립트는 개체의 기본값을 반환하려고 합니다.개체는 개체의 .valueOf() 또는 .toString() 메서드를 사용하여 기본 String 또는 Number 값으로 변환됩니다.실패할 경우 런타임 오류가 발생합니다.

Douglas Crockford는 다양한 유형의 값이 논리적 맥락에서 평가될 때, 특히 에지 [11]사례와 관련하여 어떻게 작용하는지를 설명하기 위해 "truthy"와 "falsey"라는 용어를 옹호합니다.이진 논리 연산자는 자바스크립트의 초기 버전에서는 부울 값을 반환했지만, 이제는 피연산자 중 하나를 반환합니다.왼쪽 오퍼랜드는 다음과 같이 평가될 수 있는 경우 반환됩니다. (연결의 경우: )a && b), 또는 분리의 경우 true. (a b); 그렇지 않으면 오른쪽 피연산자가 반환됩니다.부울 피연산자가 숫자 값으로 비교되기 때문에 비교 연산자에 의한 자동 형식 강제는 부울 및 숫자 호환 피연산자(숫자로 평가할 수 있는 문자열 또는 그러한 문자열로 평가할 수 있는 개체 포함)가 혼합된 경우에 따라 다를 수 있습니다.예상치 못한 일입니다.식은 논리적 부정 연산자를 두 배로 늘리거나, 부울() 함수사용하거나, 조건 연산자를 사용하여 부울 프리미티브에 명시적으로 캐스트할 수 있습니다.c ? t : f).

// 자동형식강제 위로의.로그.(진실의  ==   2 ); // 거짓..true → 1 !== 2 ← 2 위로의.로그.(거짓의 ==   2 ); // 거짓..false → 0 !== 2 ← 2 위로의.로그.(진실의  ==   1 ); // true..true → 1 === 1 ← 1 위로의.로그.(거짓의 ==   0 ); // 참..false → 0 === 0 ← 0 위로의.로그.(진실의  ==  "2"); // 거짓..true → 1 !== 2 ← "2" 위로의.로그.(거짓의 ==  "2"); // 거짓..false → 0 !== 2 ← "2" 위로의.로그.(진실의  ==  "1"); // true..true → 1 === 1 ← "1" 위로의.로그.(거짓의 ==  "0"); // 참..false → 0 === 0 ← "0" 위로의.로그.(거짓의 ==  "" ); // 참..false → 0 === 0 ← "" 위로의.로그.(거짓의 ==  NaN); // 거짓..false → 0 !== NaN  위로의.로그.(NaN == NaN); // 거짓......NaN은 NaN을 포함한 어떤 것과도 동등하지 않습니다.  // 유형 확인된 비교(유형 및 값 변환 없음) 위로의.로그.(진실의 === 1); // false....... 데이터 유형이 일치하지 않습니다.  // 명시적 유형 강제성 위로의.로그.(진실의 === !!2);   // true.. 데이터 유형과 값이 일치합니다. 위로의.로그.(진실의 === !!0);   // 거짓..데이터 유형은 일치하지만 값은 다릅니다. 위로의.로그.( 1  ? 진실의 : 거짓의); // 참..±0 및 NaN만 "거짓" 숫자입니다. 위로의.로그.("0" ? 진실의 : 거짓의); // 참..빈 문자열만 "htty"입니다. 위로의.로그.(부울({}));    // true.. 모든 물체는 "true"입니다. 

새 연산자를 사용하여 부울 프리미티브의 개체 래퍼를 만들 수 있습니다.그러나 연산자 유형은 개체 래퍼에 대해 부울을 반환하지 않고 개체를 반환합니다.모든 개체가 true로 평가되기 때문에 .valueOf() 또는 .toString()과 같은 메서드를 사용하여 랩핑된 값을 검색해야 합니다.부울 유형에 대한 명시적인 강제를 위해 Mozilla는 부울 개체에 우선하여 부울() 함수( 함수 없음)를 사용할 것을 권장합니다.

머리를 짜다 b = 신규 부울(거짓의);   // 개체 false {} 머리를 짜다 t = 부울(b);           // 부울 참 머리를 짜다 f = 부울(b.의 값()); // 부울 거짓 허락하다 n = 신규 부울(b);       // 추천하지 않음 n = 신규 부울(b.의 값()); // 선호하는  한다면 (0    -0    ""    귀무의    미정의    b.의 값()    !신규 부울()    !t) {   위로의.로그.("절대로 이것은"); } 또 다른 한다면 ([] && {} && b && 유형의 b === "객체" && b.스트링으로() === "어렵게") {   위로의.로그.("언제나 이것"); } 

기호.

ECMAscript6의 새로운 기능입니다.기호는 고유하고 불변인 식별자입니다.

예:

허락하다 x = 기호.(1); 머리를 짜다 y = 기호.(1); x === y; // => 거짓  머리를 짜다 symbolObject = {}; 머리를 짜다 normal Object = {};  // x 와 y 가 독특하기 때문에 // 그것들은 물체에 고유한 키로 사용될 수 있습니다. symbolObject[x] = 1; symbolObject[y] = 2;  symbolObject[x]; // => 1 symbolObject[y]; // => 2  // 일반 숫자 키와 비교하여 normal Object[1] = 1; normal Object[1] = 2; // 1의 값을 재정의합니다.  normal Object[1]; // => 2  // x의 값을 변경해도 개체에 저장된 키는 변경되지 않습니다. x = 기호.(3); symbolObject[x]; // => 미정의  // x를 뒤로 바꾸면 다른 고유 기호가 생성됩니다. x = 기호.(1); symbolObject[x]; // => 미정의 

알려진 기호들도 있습니다.

그중 하나는Symbol.iterator; 무슨 일이 생기면Symbol.iterator, 그것은 가능합니다:

머리를 짜다 x = [1, 2, 3, 4]; // x는 배열입니다. x[기호..반복자] === 배열.원형의[기호..반복자]; // 그리고 어레이는 반복 가능합니다.  머리를 짜다 x반복기 = x[기호..반복자](); // [Symbol.iterator] 기능은 x에 대한 반복기를 제공해야 합니다. x반복기.다음 분.(); // { 값: 1, 완료: false } x반복기.다음 분.(); // { 값: 2, 완료: false } x반복기.다음 분.(); // { 값: 3, 완료: false } x반복기.다음 분.(); // { 값: 4, 완료: false } x반복기.다음 분.(); // { 값: 정의되지 않음, 완료됨: true} x반복기.다음 분.(); // { 값: 정의되지 않음, 완료됨: true}  // …을 위하여루프의 값이 자동으로 반복됩니다. 위해서 (머리를 짜다 가치  x) {    위로의.로그.(가치); // 1 2 3 4 }  // 집합은 반복 가능합니다. [기호..반복자] 인에 세트.원형의; // 참다운  위해서 (머리를 짜다 가치  신규 세트(['사과', '미친'])) {    위로의.로그.(가치); // "사과" "사과" } 

고유물체

자바스크립트 언어는 소수의 네이티브 객체를 제공합니다.자바스크립트 네이티브 개체는 자바스크립트 사양의 일부로 간주됩니다.자바스크립트 환경에도 불구하고 이 개체 집합은 항상 사용 가능해야 합니다.

배열

배열(Array)은 자바스크립트 객체의 원형으로,Array정수 키로 인덱싱된 데이터 값을 저장하도록 특별히 설계된 생성자.배열은 기본 Object type과 달리 prototype으로 prototype화되어 프로그래머가 일상적인 작업을 수행하는 데 도움이 됩니다(예:join,slice,그리고.push).

C 계열에서와 같이 배열은 영-기반 인덱싱 체계(zero-based indexing scheme)를 사용합니다. 다음과 같은 방법으로 빈 배열에 삽입되는 값입니다.pushmethod가 배열의 0번째 인덱스를 차지합니다.

머리를 짜다 마이어레이 = [];          // 변수 myArray가 새로...를 가리킵니다.                              // ... 생성됨, 빈 배열 마이어레이.밀다("헬로 월드"); // 다음 빈 인덱스를 채웁니다(이 경우 0). 위로의.로그.(마이어레이[0]);     // console.log("hello World")와 동등합니다. 

배열은 다음과 같습니다.length항상 배열에 사용되는 가장 큰 정수 인덱스보다 큰 속성을 보장합니다.인덱스가 훨씬 큰 속성을 만들면 자동으로 업데이트됩니다.더 작은 숫자를 에 적습니다.lengthproperty는 더 큰 인덱스를 제거합니다.

요소Arrays는 일반 객체 속성 접근 표기법을 사용하여 접근할 수 있습니다.

마이어레이[1];  // 마이어레이의 두번째 아이템 마이어레이["1"]; 

위의 두 가지는 동치입니다."dot"-notation 또는 숫자의 대체 표현이 있는 문자열은 사용할 수 없습니다.

마이어레이.1;     // 구문 오류 마이어레이["01"]; // 내 어레이[1]와 같지 않음 

배열의 선언은 다음 중 하나를 사용할 수 있습니다.Array문자 그대로의Array생성자:

허락하다 마이어레이;  // 배열 리터럴 마이어레이 = [1, 2]; // 2의 길이 마이어레이 = [1, 2,]; // same array - 끝에 쉼표를 하나 더 넣을 수도 있습니다.  // 배열의 일부를 채우지 않을 수도 있습니다. 마이어레이 = [0, 1, /* 구멍 */, /* 구멍 */, 4, 5]; // 길이 6 마이어레이 = [0, 1, /* 구멍 */, /* 구멍 */, 4, 5,]; // 동배열 마이어레이 = [0, 1, /* 구멍 */, /* 구멍 */, 4, 5, /* 구멍 */,]; // 길이 7  // 시공자와 함께 마이어레이 = 신규 배열(0, 1, 2, 3, 4, 5); // 길이 6 마이어레이 = 신규 배열(365);              // 길이 365의 빈 배열 

어레이는 정의된 요소만이 메모리를 사용하도록 구현되며, 는 "희소 어레이"입니다.세팅myArray[10] = 'someThing'그리고.myArray[57] = 'somethingOther'다른 물체와 마찬가지로 이 두 원소를 위한 공간만 사용합니다.length배열의 경우에도 58로 보고됩니다.어레이의 최대 길이는 4,294,967,295이며, 이는 32비트 이진수(1111111111111111111111111111111111)2에 해당합니다.

객체 선언 리터럴을 사용하여 다른 언어의 연관 배열과 매우 유사하게 동작하는 객체를 만들 수 있습니다.

머리를 짜다  = {색.: "갈색", 크기: "큰"}; ["color"]; // "갈색"이 됩니다. .색.;    // 또한 "갈색"이 됩니다. 

개체 및 배열 선언 리터럴을 사용하여 연관 배열, 다차원 배열 또는 둘 다인 배열을 빠르게 생성할 수 있습니다.(기술적으로 자바스크립트는 다차원 배열을 지원하지 않지만 배열을 사용하여 이를 모방할 수 있습니다.)

머리를 짜다 고양이들 = [{색.: "갈색", 크기: "큰"},     {색.: "검은색", 크기: "작은"}]; 고양이들[0]["크기"];      // "큰" 결과가 나타납니다.  머리를 짜다 개들 = {배회하다: {색.: "갈색", 크기: "큰"},     : {색.: "검은색", 크기: "작은"}}; 개들["스팟"]["크기"]; // "작은" 결과를 가져옵니다. 개들.배회하다.색.;     // "갈색"이 됩니다. 

날짜.

A Date개체는 1970-01-01 00:00:00 UT를 나타내는 0과 ±10일8 범위의 서명된 밀리초 카운트를 저장합니다.에 논거를 제공하는 몇가지 방법이 있습니다.Date시공자월은 0을 기준으로 합니다.

신규 날짜.();                       // 현재 시간/날짜를 나타내는 새 날짜 인스턴스를 만듭니다. 신규 날짜.(2010, 3, 1);             // 2010-3-01 00:00:00을 나타내는 새 날짜 인스턴스 생성 신규 날짜.(2010, 3, 1, 14, 25, 30); // 2010-3-01 14:25:30을 나타내는 새 날짜 인스턴스를 만듭니다. 신규 날짜.("2010-3-1 14:25:30");    // 문자열에서 새 날짜 인스턴스를 만듭니다. 

필드를 추출하는 방법 및 유용한 방법이 제공됩니다.toString:

머리를 짜다 d = 신규 날짜.(2010, 2, 1, 14, 25, 30); // 2010-3-01 14:25:30;  // '2010-3-11 14:25:30'을 표시합니다. 위로의.로그.(d.1년 내내 받다() + '-' + (d.get Month() + 1) + '-' + d.getDate() + ' '     + d.get hours() + ':' + d.get Minutes() + ':' + d.getSeconds());  // 기본 제공 String은 '2010년 3월 1일 월요일 14:25:30 GMT-0500(동부 표준시)'과 같은 것을 반환합니다. 위로의.로그.(d); 

오류

사용자 지정 오류 메시지는Error클래스:

던지다 신규 오류("뭔가 잘못됐어요."); 

이것들은 시도해서 잡을 수 있습니다.마지막으로 예외 처리에 대한 섹션에 설명된 대로 블록을 사용합니다.

수학

Math 개체에는 다양한 수학 관련 상수(예: π)와 함수(예: 코사인)가 포함되어 있습니다.(Math 개체에는 배열 또는 날짜와 달리 생성자가 없습니다.모든 메소드는 "static", 즉 "class" 메소드입니다.)모든 삼각 함수는 각도나 눈금아닌 라디안으로 표시된 각도를 사용합니다.

수학 객체에 포함된 상수 중 일부
소유물 반환값
5자리로 반올림한
묘사
수학.E 2.7183 e: 자연로그 기저
수학.LN2 0.69315 자연로그 2
수학.LN10 2.3026 자연로그 10
수학.LOG2E 1.4427 e의 밑 2에 대한 로그
수학.LOG10E 0.43429 e의 밑 10에 대한 로그
수학.PI 3.14159 π : 원둘레/원둘레
수학.SQRT1_2 0.70711 ½의 제곱근
수학.SQRT2 1.4142 2의 제곱근
수학 객체의 방법
반환값
5자리로 반올림한
묘사
math.abs(-2.3) 2.3 절댓값
Math.acos(수학).SQRT1_2) 0.78540 rad = 45° 아르코신
수학.asin(수학)SQRT1_2) 0.78540 rad = 45° 아크신
수학.atan(1) 0.78540 rad = 45° 반원 아크탄젠트( -π / {\~ +π / {\ )
수학.atan2(-3.7, -3.7) -2.3562 rad = -135° 전체 원 아크탄젠트( -π {\ ~+ π{\ )
math.ceil(1.1 2 천장: 최소 정수 ≥ 인수까지 반올림
Math.cos(수학).PI/4) 0.70711 코사인
math.exp(1) 2.7183 지수 함수: e를 이 거듭제곱으로 올립니다.
수학.바닥(1.9) 1 바닥: 최대 정수 ≤ 인수로 반올림
Math.log(수학).E) 1 자연 로그, 밑 e
산술.max(1, -2) 1 최대: (x > y) ? x : y
수학.min(1, -2) −2 최소값: (x < y) ? x : y
수학.pow(-3, 2) 9 지수화(의 힘으로 상승):math.pow(x,y)는 x를 줍니다y.
math.random() 예를 들어 0.17068 0(포함)과 1(단독) 사이의 의사 난수
수학.원형(1.5) 2 가장 가까운 정수로 반올림, 반분수 반올림(예: 1.5에서 2로 반올림)
Math.sin(수학).PI/4) 0.70711 사인
math.sqrt(49) 7 제곱근
Math.tan(수학).PI/4) 1 접선

정규식

/표현/.시험(끈을);     // 부울을 반환합니다. "스트링".서치(/표현/); // 반송 위치 번호 "스트링".교체하다(/표현/, 대체품);  // 여기 몇 가지 예가 있습니다. 한다면 (/톰/.시험("내 이름은 톰입니다")) 위로의.로그.("안녕 톰!"); 위로의.로그.("내 이름은 톰입니다".서치(/톰/));          // == 11 (톰 앞에 도착) 위로의.로그.("내 이름은 톰입니다".교체하다(/톰/, )); // == "내 이름은 존" 

캐릭터 클래스

// \d - 숫자 // \D - 숫자가 아닌 // \s - 공간 // \S - 공백 없음 // \w - 단어 char // \W - 단어 외 // [ ] - 하나 // [^] - 한 가지가 아닙니다. //  - - 범위  한다면 (/\d/.시험('0'))                   위로의.로그.('자리'); 한다면 (/[0-9]/.시험('6'))                위로의.로그.('자리'); 한다면 (/[13579]/.시험('1'))              위로의.로그.('홀수'); 한다면 (/\S\S\S\S\S\S/.시험('내 이름')) 위로의.로그.('형식 확인'); 한다면 (/\w\w\w/.시험('톰'))             위로의.로그.('안녕 톰'); 한다면 (/[a-zA-Z]/.시험('B'))             위로의.로그.('편지'); 

문자 일치

// A...Za...z 0...9 - 영숫자 // \u0000...\uFFFFF - 유니코드 16진수 // \x00...\xFF - ASCII 16진수 // \t - 탭 // \n - 새 줄 // \r - CR // . - 모든 캐릭터 //                    - 수술을 받은 독자  한다면 (/T.m/.시험('톰')) 위로의.로그. ('안녕 탐, 탐 또는 팀'); 한다면 (/A B/.시험("A"))  위로의.로그. ('A 또는 B'); 

리피터즈

// ? - 0 또는 1 일치 // * - 0 이상 // + - 1 이상 // {n} - 정확히 n // {n,} - 이상 // {0,n} - n 이하 // {n,m} - n ~ m 범위  한다면 (/ab?c/.시험("ac"))       위로의.로그.("오케이"); // match: "ac", "match" 한다면 (/ab*c/.시험("ac"))       위로의.로그.("오케이"); // match: "ac", "float", "abbc", "floatbc" 등. 한다면 (/ab+c/.시험("어렵게"))      위로의.로그.("오케이"); // match: "match", "abbc", "matchbc" 등. 한다면 (/ab{3}c/.시험("bcbc"))  위로의.로그.("오케이"); // match: "matchbc" 한다면 (/ab{3,}c/.시험("bcbc")) 위로의.로그.("오케이"); // match: "abbbc", "abbbbc", "abbbbc" 등. 한다면 (/ab{1,3}c/.시험("어렵게"))  위로의.로그.("오케이"); // match: "match", "abbc", "matchbc" 

앵커

// ^ - 문자열은 다음으로 시작합니다. // $ - 문자열 끝은 다음과 같습니다.  한다면 (/^나의/.시험("내 이름은 톰입니다"))   위로의.로그. ("안녕하세요!"); 한다면 (/Tom$/.시험("내 이름은 톰입니다"))  위로의.로그. ("안녕 톰!"); 

부식

// ( ) - 그룹 문자  한다면 (/water(표시)?/.시험("어렵게")) 위로의.로그.("여기 물이 있습니다!"); // match: "water", "water", "water", 한다면 (/(톰)(존)/.시험())      위로의.로그.("안녕 톰 아니면 존!"); 

깃발

// /g - 전역 // /i - 대문자/ 소문자 무시 // /m - 일치하는 항목을 여러 줄에 걸쳐 허용합니다.  위로의.로그.("히톰!".교체하다(/톰/아이, ));  // == "존, 안녕!" 위로의.로그.(라타탐.교체하다(/ta/, "tu"));      // == "라투탐" 위로의.로그.(라타탐.교체하다(/ta/g, "tu"));     // == "쥐" 

고급방법

my_array = my_string.분열되다(my_miter); // 예를 들면 my_array = "개, 고양이, 고양이".분열되다(",");      // my_array==["dog","cat","cat","my"];  my_array = my_string.경기(나의_표현); // 예를 들면 my_array = "11시 30분, 12시 15분, 16시 45분에 시작합니다.".경기(/\d\d:\d\d/g); // my_array==["11:30","12:15","16:45"]; 

그룹 캡쳐하기

머리를 짜다 my Re = /(\d{4}-\d{2}-\d{2})(\d{2}:\d{2})/; 머리를 짜다 결과. = my Re.중역("일시는 2009-09-08 09:37:08 입니다.); 한다면 (결과.) {   위로의.로그.("일치하는: " + 결과.[0]); // 전 경기   머리를 짜다 my_date = 결과.[1]; // 첫 번째 그룹 == "2009-09-08"   머리를 짜다 my_time = 결과.[2]; // 두번째 그룹 == "09:37:08"   위로의.로그.('그것은${my_time}위에${my_date}`); } 또 다른 위로의.로그.("유효한 날짜를 찾지 못했습니다!"); 

기능.

자바스크립트의 모든 함수는 예입니다.Function생성자:

// x, y가 인수입니다.'return x + y'는 인수 목록의 마지막에 있는 함수 본문입니다. 머리를 짜다 더하다 = 신규 기능.(x', 'y', '반환 x + y'); 더하다(1, 2); // => 3 

위의 add 함수는 함수식을 사용하여 정의할 수도 있습니다.

머리를 짜다 더하다 = 기능.(x, y) {   돌아가다 x + y; }; 더하다(1, 2); // => 3 

ES6에서는 화살표 함수 구문이 추가되어 값을 반환하는 함수를 보다 간결하게 할 수 있었습니다.그들은 또한 그들을 유지합니다.this전지구적인 물체를 그것이 불리는 곳으로부터 물려받는 대신에 / 그것이 불리는 것은 다르게.function() {}표현.

머리를 짜다 더하다 = (x, y) => {돌아가다 x + y;}; // 값을 암묵적으로 반환할 수도 있습니다(즉, 반환문이 필요하지 않음). 머리를 짜다 추가 암시적 = (x, y) => x + y;  더하다(1, 2); // => 3 추가 암시적(1, 2) // => 3 

상승시켜야 하는 기능의 경우 다음과 같은 별도의 표현이 있습니다.

기능. 더하다(x, y) {   돌아가다 x + y; } 더하다(1, 2); // => 3 

호이스팅을 사용하면 함수를 "선언"하기 전에 사용할 수 있습니다.

더하다(1, 2); // => 3, Reference Error 아님 기능. 더하다(x, y) {   돌아가다 x + y; } 

함수 인스턴스에는 속성 및 메서드가 있습니다.

기능. 빼다(x, y) {   돌아가다 x - y; }  위로의.로그.(빼다.길이); // => 2, 함수의 희귀성(인수의 수) 위로의.로그.(빼다.스트링으로());  /* "함수 빼기(x, y) { x - y를 반환합니다. }" */ 

연산자

'+' 연산자가 오버로드되었습니다. 문자열 연결 및 산술 덧셈에 사용됩니다.이것은 실수로 문자열과 숫자를 섞을 때 문제를 일으킬 수 있습니다.단항 연산자로서 숫자 문자열을 숫자로 변환할 수 있습니다.

// 문자열 2개 연결 위로의.로그.('그' + 'llo'); // 화면표시 Hello  // 숫자 2개 더하기 위로의.로그.(2 + 6);  // 디스플레이 8  // 숫자와 문자열을 추가하면 (왼쪽에서 오른쪽으로) 연결됩니다. 위로의.로그.(2 + '2');    // 디스플레이 22 위로의.로그.('
                
+ 3 + 4); // $34를 표시하지만 $7을 예상했을 수도 있습니다. 위로의.로그.('
$$SIDE_BOTTOM$$
    $$BOTTOM$$