로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.중간의 다른 편집과 충돌하여 이 편집을 되돌릴 수 없습니다. 스팸 방지 검사입니다. 이것을 입력하지 마세요!{{ECMAScript}} [https://www.ecma-international.org/ecma-262/ 스펙 문서] == 개요 == '''ECMAScript 2019'''는 2019년 6월에 승인된 [[ECMAScript]] 표준([[JavaScript]])의 10번째 개정판이다. ES10이라고도 부른다. == 추가 사항 == === Array.prototype.flat() === 배열 내의 배열들을 펼쳐 만든 새 배열을 반환하는 메서드가 추가되었다. 인자는 펼칠 깊이를 나타낸다. 인자 없이 호출하면 한 번만 펼치고, 인자에 정수를 주면 그 횟수만큼 펼친다. <code>Infinity</code>를 이용하면 모든 내부 배열을 깊이에 관계 없이 펼쳐준다. <syntaxhighlight lang="js"> let arr = [[1, 2], [3], [4, [5, [6]], 7]] console.log(arr.flat()) // [1, 2, 3, 4, [5, [6]], 7] console.log(arr.flat(2)) // [1, 2, 3, 4, 5, [6], 7] console.log(arr.flat(Infinity)) // [1, 2, 3, 4, 5, 6, 7] </syntaxhighlight> === Array.prototype.flatMap() === <code>.map()</code> 이후에 <code>.flat()</code>을 실행하는 것과 똑같은 기능을 수행하는 메서드가 추가되었다. 인자로 주어진 함수를 대상 배열의 요소들에 각각 적용하여 새 배열을 만들고, 그 배열의 내부 배열들을 한 단계 펼친다. map과 flat을 순서대로 호출하는 것보다 효율적이다. <syntaxhighlight lang="js"> let arr = ["철수 영희", "산 바다"] console.log(arr.map(x => x.split(" "))) // [["철수", "영희"], ["산", "바다"]] console.log(arr.flatMap(x => x.split(" "))) // ["철수", "영희", "산", "바다"] </syntaxhighlight> === String.prototype.trimStart(), trimEnd() === <code>String.prototype.trim()</code>은 문자열 앞뒤의 공백(줄바꿈 문자 포함)을 제거하여 반환하는 역할을 한다. ES10에선 앞이나 뒤의 공백을 선택적으로 제거할 수 있는 메서드를 추가했다. <code>.trimStart()</code>나 <code>.trimLeft()</code>는 문자열 앞의 공백을, <code>.trimEnd()</code>나 <code>.trimRight()</code>는 문자열 뒤의 공백을 제거한다. 같은 기능을 하는 메서드가 두 개씩 추가된 것은 호환성을 위해서라고 하며, 원칙적으로는 <code>.trimStart()</code>와 <code>.trimEnd()</code>가 기본이고 나머지는 별칭이다<ref>https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trimStart</ref>. <syntaxhighlight lang="js"> let str = " aaa " console.log(str.trim()) // "aaa" console.log(str.trimStart()) // "aaa " console.log(str.trimEnd()) // " aaa" // trimStart, trimEnd가 기본 console.log(String.prototype.trimLeft.name) // "trimStart" console.log(String.prototype.trimRight.name) // "trimEnd" </syntaxhighlight> === Object.fromEntries() === [[ECMAScript 2017]]에 도입된 <code>Object.entries()</code>에 이어 추가된 메서드이다. <code>Object.entries()</code>가 객체로부터 2차원 배열을 만들었다면 <code>Object.fromEntries()</code>는 반대로 이러한 2차원 배열로부터 객체를 생성한다. <syntaxhighlight lang="js"> let obj = { a: "aaa", b: "bbb" } console.log(Object.entries(obj)) // [["a", "aaa"], ["b", "bbb"]] let arr = [["a", "aaa"], ["b", "bbb"]] console.log(Object.fromEntries(arr)) // { a: "aaa", b: "bbb" } </syntaxhighlight> === Symbol.prototype.description === <code>Symbol</code>객체에 <code>description</code>이라는 읽기 전용 프로퍼티가 생겼다. Symbol을 생성할 때 넣은 문자열 값이 들어있다. == 변경점 == === Array.prototype.sort() === 배열을 정렬하는 <code>.sort()</code> 메서드가 항상 stable sort로 작동하도록 명시되었다. 즉, 배열을 정렬시 비교해서 순위가 같은 원소는 원래 순서를 유지하게 된다. <syntaxhighlight lang="js"> let arr = [ { id: 1, value: 10 }, { id: 2, value: 18 }, { id: 3, value: 9 }, { id: 4, value: 10 } ] arr.sort((a, b) => a.value - b.value) /* [ { id: 3, value: 9 }, { id: 1, value: 10 }, { id: 4, value: 10 }, { id: 2, value: 8 } ] */ </syntaxhighlight> === 선택적 Catch 바인딩 === 기존의 <code>try ... catch</code>문법은 항상 <code>catch (error)</code>와 같이 에러 변수를 받아야만 했다. 그러나 에러 변수가 필요하지 않은 상황에서도 무조건 변수를 받는 것은 불편하였고, 특히 linter를 사용하는 경우 해당 에러 변수를 사용하지 않았다는 경고 메시지를 출력하는 경우가 있다. ES10에선 <code>(error)</code> 부분을 생략할 수 있게 되었다. <syntaxhighlight lang="js"> // before try { doSomething() } catch (error) { // I don't need this error! } // after try { doSomething() } catch { // I'm happy now! } </syntaxhighlight> === Function.prototype.toString() === 함수가 가진 메서드인 <code>.toString()</code>은 함수의 구현을 문자열로 표시해주는 기능을 한다. 기존에는 브라우저마다 구현이 달랐으나, ECMAScript 2019에서 구현 방법을 통일하기로 하였다. 다음과 같이 작동하게 된다.<ref>[https://2ality.com/2016/08/function-prototype-tostring.html 2ality.com]</ref> * 자바스크립트 코드로 정의된 함수의 경우는 원래 소스코드를 그대로 출력한다. 주석도 포함한다. * 줄바꿈: 함수 정의시 \r\n이나 \r등을 이용하여 줄을 바꿨더라도 \n으로 통일해서 출력된다. * 빌트인 함수: 자바스크립트 코드로 정의되지 않은 내장 함수나 C++ 모듈 코드 등은 <code>[native code]</code>로 표시된다. {{각주}} [[분류:ECMAScript]] 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:ECMAScript (편집) 틀:각주 (원본 보기) (준보호됨)