Meguro.es # 21の資料です。 https://meguroes.connpass.com/event/125499/
資料ではtop-level awaitがStage2になっていますがStage3になりました。
Google I/O’19͔ΒݟΔ৽͍͠+BWB4DSJQUM e g u r o . e s # 2 12 0 1 9 / 0 6 / 0 6@ t o s h i - t o m a
View Slide
About MeToshihisa Tomatsu@toshi-toma@toshi__toma
“What’s new in JavaScript (Google I/O ’19)”
What’s new in JavaScript৽͍͠ϓϩϙʔβϧͷػೳΛ͍͔ͭ͘հJavaScriptͲΜͲΜਐԽ͍ͯ͠ΔͧʂV8ʹΑΔJavaScriptͷ࠷దԽࠃࡍԽରԠඇಉظॲཧʹ͓͚Δػೳ͕͍͔ͭ͘
հ͞Ε͍ͯͨϓϩϙʔβϧArray#{flat, flatMap}Private Class FieldsNumeric Separatorsؾʹͳͬͨ༰Λ͍͔ͭ͘հBigIntObject.fromEntriesString#matchAllIntl.*APIsglobalThisArray#sorttop-level await WeakRef Promise.{allSettled, any}৽͍͠Syntaxඇಉظॲཧʹؔ͢ΔAPI, ࠃࡍԽରԠ etc
Private Class Fields1Chrome, Node.jsͰαϙʔτ
Private Class Fieldsγϟʔϓ Λ͚ͭΔͱ$MBTTͷ1SJWBUFϑΟʔϧυ͜Ε·ͰΞϯμʔείΞ @Ͱ1SJWBUFΛදݱ͍ͯͨͨͩ͠͠ɺγεςϜతͳڧ੍ྗͳ͍Stage 3
Class Fieldshttps://github.com/tc39/proposal-class-fields
Private Class Fieldshttps://github.com/tc39/proposal-class-fields#private-fields
ࢀߟPrivate Class Field ͷಋೖʹ͏ JS ͷߏจ֦ுhttps://blog.jxck.io/entries/2019-03-14/private-class-field.htmlES Class FieldsͷϓϥΠϕʔτϑΟʔϧυ͕ϋογϡͳมଶه๏ͳͷԿͰͳΜͩͥʁhttps://gist.github.com/teppeis/06c2b7e97c7d67684c3d3c94159893f3
Numeric Separators2Chrome 75 & BabelͰαϙʔτ
Numeric Separatorsඇৗʹେ͖ͳࣈͷϦςϥϧਓؒͷʹݫ͍͠ಡΈ͢͞Λ্ͤ͞ΔͨΊʹ @ΞϯμʔείΞ۠ΓͰදݱ10000000000000100000000000000230400000000000000Stage 3
Numeric Separatorshttps://github.com/tc39/proposal-numeric-separator
Array#{flat, flatMap}3ChromeɺFirefoxɺSafariɺNode.jsͰαϙʔτ
Array. prototype.flatflat()σϑΥϧτͰ1֊͚ͩల։ͯ͘͠ΕΔҙͷࣈΛ͢͜ͱͰͦͷਂ͞·Ͱ࠶ؼతʹల։͢ΔɻES2019
Array. prototype.flatMapྻΛNBQʹͯ͠தؒॲཧΛͯ͠ɺ͔ͦ͜ΒGMBUʹ͢ΔύλʔϯҰൠతʹΑ͘ߦΘΕΔ[1, 2, 3].map(x => [x, x]).flat(); // [1, 1, 2, 2, 3, 3]ES2019[1, 2, 3].flatMap(x => [x, x]); // [1, 1, 2, 2, 3, 3]
Object.fromEntries4ChromeɺFirefoxɺSafariɺNode.jsͰαϙʔτ
Object.fromEntriesObject.entriesͰkeyͱvalueͷϖΞͷྻΛੜͰ͖ΔɻͦͷٯΛͰ͖Δͷ͕fromEntries͍Ͳ͜Ζͱͯ͠ɺLFZͱWBMVFʹରͯ͠GJMUFSͳͲͰԿ͔ ͠ΒͷॲཧΛͯ͠ɺͦͷ݁ՌΛ0CKFDUʹ͍ͨ͠έʔεͱ͔ES2019
Promise.allSettled5Chrome76ͱFirefox NightlyͰαϙʔτ
Promise.allSettledෳͷ1SPNJTFΛྻͰ͢έʔεͷ৽͍͠"1*ͱʹ͔͘શ෦࣮ߦ͢ΔͲΕ͔ࣦഊͨ͠ͱͯͯ͢͠ͷ1SPNJTFΛ࣮ߦͯ͠ ͦͷ݁ՌΛͭ (Promise.allͷ߹ͲΕ͔ࣦഊͨ͠Βɺͦͷ࣌Ͱऴྃ)Stage 3
Promise.allSettledStage 3
Promise.any6
Promise.anyෳͷ1SPNJTFΛྻͰ͢έʔεͷ৽͍͠"1*Promise͕ͲΕ͔1ͭͰresolve͞ΕͨΒͦͷ࣌Ͱऴྃ(Promise.racerejectؚΉ)Stage 1ͲΕͰ͍͍͔ΒҰͭͰޭͨ͠Β
top-level await6
top-level await͍·ͩͱɺBTZODؔͰϥοϓͯ͋͛ͯ͠ݺͼग़͢ඞཁ͕͋ΔτοϓϨϕϧͰBXBJU͕ॻ͚ΔChromeͷDevToolsͷίϯιʔϧͰར༻ՄೳStage2
"SSBZ\GMBU GMBU.BQ^1SJWBUF$MBTT'JFMET/VNFSJD4FQBSBUPST#JH*OU0CKFDUGSPN&OUSJFT4USJOHNBUDI"MM*OUM"1*THMPCBM5IJT"SSBZTPSUUPQMFWFMBXBJU8FBL3FG1SPNJTF\BMM4FUUMFE BOZ^
৽͍͠+BWB4DSJQUࠓޙ͑ΔΑ͏ʹͳΓͦ͏ͳ4ZOUBY"1*͕Θ͔ͬͨͲΜͲΜศརʹͳΓͦ͏֤1SPQPTBMͷ༰Ϟνϕʔγϣϯ(JU)VC্ͰΕͨ·ͣQSPQPTBMTΛݟΔͷ͕ྑͦ͞͏ https://github.com/tc39/proposalsࠓճ1SPQPTBMͷഎܠΛௐΕͳ͔ͬͨͷͰ ࣍ͳͥͦͷ1SPQPTBM͕ੜ·Εͨͷ͔ௐΔ
Thanks!
ࢀߟϦϯΫhttps://youtu.be/c0oy0vQKEZEhttps://jsprimer.net/basic/ecmascript/https://github.com/tc39/proposal-class-fieldshttps://github.com/tc39/proposal-numeric-separatorhttps://tc39.github.io/proposal-flatMap/https://tc39.github.io/proposal-object-from-entries/https://github.com/tc39/proposal-promise-allSettledhttps://github.com/tc39/proposal-promise-anyhttps://github.com/tc39/proposal-top-level-await