standaardparameters in ES6
wanneer we modules schrijven, moeten we rekening houden met gevallen waarin de argumenten zullen worden weggelaten. Met andere woorden, goede modules moeten slim genoeg zijn om standaardwaarden voor parameters te hebben. In ES5 zou je zoiets schrijven als de onderstaande code, die gebruik maakt van de logische OR (||):
deze statements werken goed, behalve voor de edge cases. Bijvoorbeeld, als de waarde 0 is — en omdat 0 falsy is in JavaScript-de voorwaarde standaard de hard-gecodeerde waarde in plaats van de waarde zelf, zoals je zou willen in sommige gevallen., Natuurlijk, wie heeft 0 nodig als waarde (#sarcasmfont), dus we negeerden deze fout en gebruikten de logica of toch…
of misschien event een if/else voorwaarde om te controleren op de ongedefinieerde waarde:
var getAccounts = function(limit) {
if (typeof limit == 'undefined') limit = 10
...
}
niet meer! In ES6, kunnen we de standaard waarden recht zetten in de handtekening van de functies als volgt:
var getAccounts = function(limit = 10) {
...
}
var link = function(height = 50, color = 'red', url = 'http://capitalone.io') {
...
}
Dit is niet alleen gebruikt minder regels code, maar heeft ook een verhoogde leesbaarheid. Trouwens, deze syntaxis is vergelijkbaar met Ruby en Python!,
Rest – en Spreadparameters in ES6
Als u ooit een JavaScript-functie met een variabele of zelfs een onbeperkt aantal argumenten hebt gebruikt of geschreven, kent u het argument-object. Dit object bevat alle parameters die aan de functie worden doorgegeven. Het probleem is dat dit object argumenten geen echte array is. Je moet het converteren naar een array als je functies als sort of map expliciet wilt gebruiken. Bijvoorbeeld, deze request functie converteert argumenten met behulp van call ():
dus is er een betere manier in ES6 om toegang te krijgen tot een onbepaald aantal argumenten als een array? Ja!, Het is rust parameters syntaxis en het is gedefinieerd met ellipsen…. Dit is bijvoorbeeld de ES6 functiehandtekening met de rest parameter callbacks die een array worden met de rest van de parameters:
function(url, options, ...callbacks) {
var callback1 = callbacks
var callback2 = callbacks
// ...
}
opmerking: in de rest array is de eerste parameter degene die geen naam heeft, bijvoorbeeld, de callback is op index 0, niet 2 zoals in de argumenten van ES5. Ook, het plaatsen van andere genoemde argumenten na de rest parameter zal een syntaxis fout veroorzaken. De rest parameter is een geweldige suikercoating toevoeging aan JavaScript, omdat het vervangt de argumenten object, dat was niet een echte array.,
in ES5, als u een array als argument voor een functie wilt gebruiken, moet u de functie apply() gebruiken:
function request(url, options, callback) {
// ...
}
var requestArgs =
request.apply(null, requestArgs)
in ES6 kunnen we nu de spreadparameters gebruiken die vergelijkbaar zijn met de restparameters in de syntaxis omdat ze ellipsen gebruiken…:
function request(url, options, callback) {
// ...
}
var requestArgs =
request(...requestArgs)
ES6 ontwikkelaars kunnen de spread operator In de volgende gevallen:
De spread operator heeft een soortgelijke syntaxis als de rest parameters, maar rest wordt gebruikt in de functiedefinitie/declaratie en spread wordt gebruikt in de calls en literals., Ze besparen ontwikkelaars van het typen van extra regels van imperatieve code, dus het kennen en gebruiken ervan is een goede vaardigheid.
Template literals in ES6
Template literals (of interpolatie zoals ze in andere talen bekend zijn) zijn een manier om variabelen uit te voeren in de string gemengd met wat tekst, meestal in gebruikersinterfaces. In ES5 moesten we de snaar zo breken.,
var name = 'Your name is ' + first + ' ' + last + '.'
var url = 'http://localhost:3000/api/messages/' + id
gelukkig kunnen we in ES6 een nieuwe syntaxis gebruiken ${NAME} in de back-ticked string:
var name = `Your name is ${first} ${last}.`
var url = `http://localhost:3000/api/messages/${id}`
Dit is netjes en stelt ontwikkelaars in staat om het eindresultaat van de strings in één oogopslag te zien in plaats van te proberen de concatenatie-expressie te evalueren.
ES6 string templates zijn goed, maar de syntaxis zal conflicten veroorzaken in de Markdown documentatie als u string templates en inline code markup gebruikt, (omdat in Markdown inline code ook wordt gemarkeerd door back-teken)., Trouwens, CoffeeScript heeft wat ik denk een betere oplossing als het dubbel afgeschreven strings interpoleert (vergelijkbaar met Ruby):
var name = "Your name is #{first} #{last}."
var url = "http://localhost:3000/api/messages/#{id}"
interpolatie is goed, maar hoe werk je met tekst met meerdere regels in JavaScript?
multi-line Strings in ES6
een andere yummy syntactic sugarcoating is multi-line string. In ES5 moesten we een van deze benaderingen gebruiken en het was lelijk., Bij aaneenschakeling:
of met escape slash:
var fourAgreements = 'You have the right to be you.\n\
You can only be you when you do your best.'
gebruik in ES6 gewoon de backticks als volgt:
var roadPoem = `Then took the other, as just as fair,
And having perhaps the better claim
Because it was grassy and wanted wear,
Though as for that the passing there
Had worn them really about the same,`
var fourAgreements = `You have the right to be you.
You can only be you when you do your best.`
multi-line strings zijn een nuttige toevoeging Als u veel tekst in uw JavaScript-code moet gebruiken.,
Destructuring Opdracht in ES6
Destructuring kan een harder concept om te begrijpen, dan multi-line strings, want er is iets bijzonders gaande is achter de scène… Laten we zeggen dat u hebt eenvoudige opdrachten waar de sleutel userId en rekeningnummer zijn variabelen gebruikers-id en het rekeningnummer:
var data = $('body').data(), // data has properties
userId and accountNumber userId = data.userId, accountNumber = data.accountNumber
Andere voorbeelden van opdrachten waar de namen van de variabelen en object-eigenschappen zijn dezelfde:
In de ES6, kunnen we vervangen door de ES5 bovenstaande code, met deze instructies:
var { userId, accountNumber} = $('body').data()
var {json} = require('body-parser')
var {username, password} = req.body
Dit werkt ook met de arrays. Gek!,
var = $('.column'),
= file.split('\n')
Het kan even duren om te wennen aan de syntaxis van de destructuring-opdracht, maar het is toch een zoete coating.
Enhanced Object Literals in ES6
wat u kunt doen met object literals in ES6 is verbluffend! We gingen van een verheerlijkte versie van JSON in ES5 naar iets dat sterk lijkt op klassen in ES6.
bij de ontwikkeling van ondernemingen is modularisatie van code belangrijk omdat projecten groter zijn en een groter aantal bewegende delen hebben. Met verbeterde object literals, kunt u echt sterke objecten geladen met functionaliteit te creëren.,
Hier is een typische ES5 object letterlijk met een aantal methoden en attributen/eigenschappen:
als we mooi willen zijn, kunnen we erven van serviceBase door er het prototype van te maken met het Object.maak methode:
ik weet het, accountServiceES5ObjectCreate en accountServiceES5 zijn NIET volledig identiek zijn, omdat een object (accountServiceES5) hebben de eigenschappen in de __proto__ object, zoals weergegeven in de afbeelding hieronder:
Maar omwille van dit voorbeeld, ik geef hen gelijk., In ES6 object literals kunnen we Steno ‘ s gebruiken voor toewijzing. Bijvoorbeeld, getAccounts: getAccounts, wordt gewoon getAccounts.
ook kunnen we super aanroepen en dynamische toetsen hebben. Bijvoorbeeld, toString () methode retourneert een JSON object als een string door super aan te roepen.valueOf (), en valueOf_1_2_3 is een dynamische eigenschapsnaam: