Skip to content

Latest commit

 

History

History
75 lines (49 loc) · 3.55 KB

ECMAScript2019.md

File metadata and controls

75 lines (49 loc) · 3.55 KB

ECMAScript 10 (ES10 or ECMAScript 2019)

목차

Optional catch binding

try {
  throw new Error("Whoops!");
} catch (unused) {}

위 코드처럼 종종 catch 블록에 있는 Catch Parameter를 사용하지 않는 경우가 있습니다. 이러한 경우에 편의를 위해 catch 블록에 Catch Parameter를 생략할 수 있게 되었습니다.

try {
  throw new Error("Whoops!");
} catch {}

단순히 문법적인 부분만 변경된 것이기 때문에, 이 변경은 기존 코드와의 호환성을 해치지 않습니다.

참고: Github - proposal-optional-catch-binding, tc39 - Optional catch binding

JSON superset

const LS = "\u2028"; // Line separator
const PS = "\u2029"; // Paragraph separator

JSON.parse(`{"lineSeparator":"${LS}"}`); // SyntaxError
JSON.parse(`{"paragraphSeparator":"${PS}"}`); // SyntaxError

ECMAScript는 JSON을 JSON.parse 하위집합(Subset)으로 주장하고 있었지만, 실제로는 JSON에서 지원하는 모든 유니코드 이스케이프 시퀀스를 지원하지 않았습니다. 예를 들어, 위 코드에서는 JSON에서 지원하는 유니코드 이스케이프 시퀀스인 Line separator(\u2028)와 Paragraph separator(\u2029)를 사용했지만, ECMAScript에서는 SyntaxError가 발생합니다.

따라서 ECMAScript 2019에서는 ECMA-262의 구문을 JSON의 상위집합(Superset)으로 확장하기 위해, 위와 같은 두 개의 유니코드 이스케이프 시퀀스를 지원하게 되었습니다.

참고: Github - proposal-json-superset, tc39 - JSON superset

Symbol.prototype.description

const sym = Symbol("foo");

console.log(sym); // Symbol(foo)
console.log(sym.description); // foo

심볼(Symbol)은 생성할 때 선택적으로 설명(description)을 정의할 수 있습니다. 이러한 설명은 Symbol.prototype.toString 메서드를 통해 확인할 수 있었습니다. 하지만 해당 메서드는 설명만 반환하지 않고 Symbol()과 같은 형태로 반환되기 때문에, 설명만 추출하기 위해서는 추가적인 처리가 필요했습니다.

예를 들어 Symbol("foo").toString().slice(7, -1); // foo 와 같은 방법으로 설명을 추출할 수 있습니다.

ECMAScript 2019에서는 이러한 설명을 추출하기 위한 Symbol.prototype.description 프로퍼티를 추가하게 되었습니다. 이를 통해 명시적으로 설명을 추출할 수 있게 되었습니다.

참고: Github - proposal-Symbol-description, MDN - Symbol.prototype.description

Function.prototype.toString revision

Object.fromEntries

Well-formed JSON.stringify

String.prototype.{trimStart,trimEnd}

Array.prototype.{flat,flatMap}