Τι νέο υπάρχει στο JavaScript ES2019

Πολλοί από εμάς γνωρίζουμε ότι υπάρχει μια τυπική διαδικασία για τις τελευταίες κυκλοφορίες του Javascript και μια επιτροπή πίσω από αυτό. Σε αυτήν την ανάρτηση, θα εξηγήσω ποιος κάνει την τελική πρόσκληση για οποιαδήποτε νέα προδιαγραφή, ποια είναι η διαδικασία για αυτήν και τι νέο υπάρχει στο ES2019.

Η προδιαγραφή γλώσσας που οδηγεί το JavaScript ονομάζεται ECMAScript. Υπάρχει μια ομάδα πίσω από αυτήν που ονομάζεται Τεχνική Επιτροπή 39 [TC39] που ελέγχει κάθε προδιαγραφή πριν από την έγκρισή της .

Κάθε αλλαγή περνά από μια διαδικασία με στάδια ωριμότητας.

  • Στάδιο 0: Ιδέες / Strawman
  • Στάδιο 1: Προτάσεις
  • Στάδιο 2: Πρόχειρα
  • Στάδιο 3: Υποψήφιοι
  • Στάδιο 4: Ολοκληρώθηκε / Εγκρίθηκε

Ένα χαρακτηριστικό που φτάνει στο Στάδιο 4 πιθανότατα θα είναι μέρος της προδιαγραφής γλώσσας.

Ας ρίξουμε μια ματιά στα πράγματα που προστέθηκαν πρόσφατα στις προδιαγραφές του ES2019.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()προτείνεται να ισοπεδώσει συστοιχίες αναδρομικά μέχρι το καθορισμένο depthκαι επιστρέφει έναν νέο πίνακα.

Σύνταξη :Array.prototype.flat(depth)

βάθος - Προεπιλεγμένη τιμή 1 , Χρήση Infinityγια ισοπέδωση όλων των ένθετων συστοιχιών.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()χαρτογραφεί κάθε στοιχείο χρησιμοποιώντας μια λειτουργία χαρτογράφησης και ισοπεδώνει το αποτέλεσμα σε έναν νέο πίνακα. Είναι ταυτόσημη με τη λειτουργία χάρτη που ακολουθείται από ένα flatτων depth1.

Σύνταξη: Array.prototype.flatMap(callback)

callback:function που παράγει ένα στοιχείο του νέου Array.

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesεκτελεί το αντίστροφο του Object.entries. Μετατρέπει μια λίστα ζευγών κλειδιών-τιμών σε ένα αντικείμενο.

Σύνταξη: Object.fromEntries(iterable)

iterable: Ένα επαναληπτικό όπως Arrayή Mapή αντικείμενα που εφαρμόζουν το επαναληπτικό πρωτόκολλο

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype. {TrimStart, trimEnd}

trimStart()αφαιρεί κενό διάστημα από την αρχή μιας συμβολοσειράς και trimEnd()αφαιρεί κενό διάστημα από το τέλος μιας συμβολοσειράς.

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

Προαιρετική πρόσφυση

Πριν από τη νέα προδιαγραφή, ήταν απαραίτητο να έχει μια μεταβλητή εξαίρεσης δεσμευμένη σε μια catchρήτρα. Το ES2019 το έκανε προαιρετικό.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Αυτή η λειτουργία είναι χρήσιμη όταν θέλετε να αγνοήσετε εντελώς το σφάλμα. Βέλτιστη πρακτική είναι να εξετάσετε το ενδεχόμενο χειρισμού ενός σφάλματος.

Υπάρχουν περιπτώσεις όπου γνωρίζετε το πιθανό σφάλμα που θα μπορούσε να προκαλέσει τις λειτουργίες. Μπορείτε να αγνοήσετε τον χειρισμό του μπλοκ σύλληψης.

JSON ⊂ ECMAScript

Τα σύμβολα διαχωριστή γραμμής (U + 2028) και διαχωριστή παραγράφων (U + 2029) επιτρέπονται τώρα σε γραμματοσειρά συμβολοσειράς. Προηγουμένως, αυτά αντιμετωπίστηκαν ως τερματιστές γραμμών και οδήγησαν σε SyntaxErrorεξαιρέσεις.

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

Καλά σχηματισμένο JSON.stringify

Αντί να μην αντιστοιχούν σημεία αντικατάστασης κωδικού που έχουν ως αποτέλεσμα μονάδες κωδικών UTF-16 , το ES10 τα αντιπροσωπεύει με ακολουθίες διαφυγής JSON.

JSON.stringify('\uD800'); > '"�"' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() Τώρα επιστρέφει ακριβή κομμάτια κειμένου πηγαίου κώδικα, συμπεριλαμβανομένων κενών διαστημάτων και σχολίων.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.description

Ιδιότητα μόνο για ανάγνωση που επιστρέφει την προαιρετική περιγραφή ενός Symbolαντικειμένου:

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

συμπέρασμα

Το TC39 διατηρεί όλες τις επερχόμενες προδιαγραφές που βρίσκονται στο στάδιο> 1 της διαδικασίας εδώ. Ως προγραμματιστής, είναι σημαντικό να παρακολουθείτε τι συμβαίνει. Υπάρχουν πολλά πιο συναρπαστικά πράγματα που έρχονται με στατικές και ιδιωτικές μεθόδους και πεδία σε τάξεις, Legacy RegE x κ.λπ. Μάθετε όλα τα νέα πράγματα που βρίσκονται στο στάδιο της πρότασης εδώ.

code = coffee + developer

Ακολουθούν μερικά πιο ενδιαφέροντα θέματα:

  • Μια γρήγορη επισκόπηση των συμβόλων JavaScript
  • Πώς να υιοθετήσετε μια στρατηγική διακλάδωσης git
  • Μια εισαγωγή στο Git Merge και το Git Rebase: Τι κάνουν και πότε να τα χρησιμοποιήσουν