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입니다.
간단히 말해, includes는 NaN을 처리할 수 있으며 희소 배열의 빈 슬롯을 건너뛰지 않습니다 (즉, 배열에 요소가 실제로 존재하는지 여부를 판단하지 않습니다).
구체적으로 includes는 동등성을 비교할 때 SameValueZero 알고리즘을 사용합니다:
-
객체는 참조값만 비교합니다.
-
원시 값은 타입과 값을 비교합니다.
-
값 비교 중에 두 가지 특이 케이스가 있는데,
+0과-0은 같다고 보며,NaN과NaN도 같다고 봅니다.
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를 참조하세요.
아직 댓글이 없습니다