- Optional
catch
binding - JSON superset
Symbol.prototype.description
Function.prototype.toString
revisionObject.fromEntries
- Well-formed
JSON.stringify
String.prototype.{trimStart,trimEnd}
Array.prototype.{flat,flatMap}
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
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)으로 확장하기 위해, 위와 같은 두 개의 유니코드 이스케이프 시퀀스를 지원하게 되었습니다.
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