본문으로 건너뛰기

ES2016

무료2018-10-20#JS#es2016特性#es7新特性#es规范发布流程#js指数运算符#js幂运算符

배열 포함 여부 검사 메서드 하나와 거듭제곱 연산자 하나. 그게 끝입니다.

1. 특징 개요

ES2016 (즉, ES7)은 2016년 6월에 발표되었으며, 단 2개의 새로운 기능만 포함하고 있습니다:

배열 포함 여부 검사 메서드 하나와 거듭제곱 연산자 하나입니다. 이게 끝입니다. ES2016은 이 두 가지 새로운 기능뿐이며, 둘 다 편의를 위한 기능들입니다.

P.S. 승인된 더 많은 기능은 Finished Proposals를 참조하세요.

2. Array.prototype.includes

배열의 includes 메서드는 다음과 같습니다:

// 返回true | false,表示包含不包含
// 可选参数fromIndex表示从该index开始找
//    默认是0,负数表示倒数第几个(array.length + fromIndex)
array.includes(item, [fromIndex])

배열에 특정 요소가 포함되어 있는지 확인하는 데 사용되며, 다음과 유사하지만 (완전히 동일하지는 않습니다):

array.indexOf(item) !== -1

두 가지 방식 사이에는 미묘한 차이가 있습니다:

  • NaN: [NaN].includes(NaN) === true이지만 [NaN].indexOf(NaN) === -1입니다.

  • 희소 배열(Sparse Array): [1, , 3].includes(undefined) === true이지만 [1, , 3].indexOf(undefined) === -1입니다.

간단히 말해, includesNaN을 처리할 수 있으며 희소 배열의 빈 슬롯을 건너뛰지 않습니다 (즉, 배열에 요소가 실제로 존재하는지 여부를 판단하지 않습니다).

구체적으로 includes는 동등성을 비교할 때 SameValueZero 알고리즘을 사용합니다:

  • 객체는 참조값만 비교합니다.

  • 원시 값은 타입과 값을 비교합니다.

  • 값 비교 중에 두 가지 특이 케이스가 있는데, +0-0은 같다고 보며, NaNNaN도 같다고 봅니다.

3. Exponentiation operator

거듭제곱 연산자는 다음과 같습니다:

// 底数 ** 指数
base ** exponent

또한 **= 연산자도 제공합니다:

let n = 2;
// 运算并赋值
n **= 4;
n; // => 16

이 연산자는 다음의 특수 케이스를 포함하여 Math.pow(base, exponent)완전히 동일합니다:

NaN ** 0;       // => 1
Infinity ** 0;  // => 1
-5 ** NaN;      // => NaN
NaN ** NaN;     // => NaN

네, 완전히 동일합니다. 거듭제곱 연산은 다시 정의할 수 없기 때문입니다 (일치하지 않으면 혼란을 야기할 수 있습니다).

4. 왜 이번 버전은 이렇게 작은가요?

이는 ES 발표 프로세스와 관련이 있습니다. ES의 새로운 기능 제안은 5단계로 나뉩니다:

  • stage 0 (Strawman): 초안 (Draft보다 더 기초적인 단계)

  • stage 1 (Proposal): 제안

  • stage 2 (Draft): 초안

  • stage 3 (Candidate): 후보 제안

  • stage 4 (Finished): 승인된 제안

기능 제안은 언제든지 할 수 있고 여러 제안이 병렬로 검토되고 추진되지만, 발표 주기는 고정되어 있습니다:

  • 2월 1일: 후보 초안 (Candidate Draft) 산출

  • 2~3월: 60일간의 수정 및 선별 기간 (royalty-free opt-out period)

  • 3월 TC39 회의: stage 4 (승인된) 제안을 병합하고, 최종 시맨틱을 보정하며, 메인 브랜치에서 새 명세 버전을 분리합니다. 이후에는 편집상의 수정만 허용됩니다.

  • 4~6월: ECMA CC 및 ECMA GA 검토 기간

  • 7월: ECMA 총회 (ECMA General Assembly)에서 새 표준 승인

매년 7월에 발표되며, 새로 승인된 기능 제안들을 포함합니다. 따라서 한 버전에 포함되는 새로운 기능의 수는 그해에 얼마나 많은 기능이 승인되었느냐에 달려 있습니다.

이러한 방식은 한편으로는 명세에 발표되는 기능들이 광범위한 검토를 거쳤음을 보장하고, 다른 한편으로는 매년 한 번씩 발표하는 빈번한 리듬을 유지하여 ES2015와 같은 거대 버전 (한 버전을 내는 데 6년 소요)이 다시 나타나는 것을 방지합니다.

P.S. Ecma TC39의 ES 발표 프로세스에 대한 자세한 정보는 The TC39 Process를 참조하세요.

참고 자료

댓글

아직 댓글이 없습니다

댓글 작성