
buongiorno a tutti, ho il dubbio
distinzione di venire subito dopo
keynote che fa piangere tutti
quindi e devo dire che potresti piangere
ma è per una ragione diversa
a causa della tua codifica JavaScript, ma
entreremo oggi e discuteremo
regole di stucco per JavaScript e di
Certo, questo è un po ‘ più profondo
parlare a livello perché sto per mostrare il codice
e mi aspetto che tu possa seguire
lungo rapidamente sarà un bel po ‘
di codice in realtà non sto facendo live
codifica ma ti mostrerò il codice
e mostrarti le cose dalla mia esperienza
quindi stiamo iniziando con questo è questo
strumento di linting che ho scritto fondamentalmente
dare un insieme di opinioni sul codice così
passeremo davvero il nostro tempo
oggi sulla riga di comando usando questo
strumento di pelatura e se noterete
da vicino questo prestito a tutti ho scritto modo
nel 1995, quando JavaScript è arrivato per la prima volta
è evidente che è uno scherzo perché quello
non era vero ma ho scritto che questo
Linter per cercare di aiutarci a capire
JavaScript perché è quello che spendo
il mio tempo si concentra su solo in modo reale brevemente
Posso darti qualche informazione su
me stesso se non sai chi sono Kyle
Simpson è che non puoi leggere ma
Sono Kyle Simpson ottenere online se sei
nella cosa degli stalking online che puoi
check out get me punto e ha collegamenti
a tutto ciò che devi sapere
su di me e apprezzo il feedback
sia positivo che negativo ottengo le persone
dimmi che sei pieno di merda e io
amo ricevere quel tipo di feedback come
bene quindi sentiti libero di raggiungere e
dare un feedback sicuramente anche assicurarsi
per fare il voto in modo che noi, come gli altoparlanti
può migliorare in quello che facciamo io sono un
open web evangelist Sono di base ad Austin
Texas negli Stati Uniti, ma fondamentalmente
visitare lì in questi giorni perché spendo
il mio tempo sulla strada di cui parlo
JavaScript e insegno JavaScript così come
una piccola spina se la tua azienda è
interessato ad avere qualcuno che venga e
insegnare su JavaScript per favore lasciatemi
so perché mi piacerebbe farlo bene
quindi una specie di setup qui di cui abbiamo bisogno
per capire perché questo discorso è
per di qua
Penso che il nostro settore ne abbia tratto beneficio
tremendamente da libri come JavaScript
le parti buone ma ci ha anche ostacolato
come industria perché credo che sia
ci ha insegnato a sorta di scappare dalla
parti difficili le parti difficili
i libri di cui parlo e il
libri che cavalco e cose del genere
Sto parlando di oggi, infatti, tutto il
insegnando che lo faccio è davvero progettato
adottare l’approccio alternativo alle cose
che invece di dire, releghiamo
noi stessi a un piccolo sottoinsieme del
linguaggio è JavaScript tutte le parti
quindi sono una specie di anti le parti buone
ma questo non significa che sia cattivo
significa solo che stiamo andando andiamo dopo tutto
delle parti di JavaScript che stiamo andando
entra subito in un attimo a parlare
sui tipi e poi sulla coercizione e
quelli sono i tipi di argomenti che
la maggior parte della gente dice oh non ho bisogno di imparare
Dovrei evitare perché ci è stato detto
che sono solo cattivi e sto andando a
prendere l’approccio opposto a quello così
da quando ho menzionato i libri che dovrei
basta andare avanti e fare una rapida presa di
questi libri questo è ciò che non conosci
Serie di libri di Jas e ho alcuni di questi
Ho tre copie quindi non è molto
ma le prime tre persone che vogliono
Vieni e prendi una copia per cui sono anche per
la vendita là fuori penso che stanno dando
20% di sconto ma puoi leggere i libri per
liberare il che non tu non sai Jas
calmo quindi è una serie di libri che ho
scritto tre sto lavorando al quarto
titolo ora ci sarà un totale di
cinque e ho anche adesivi gratuiti se lo sei
interessato così tanto a questo
spazzatura di auto-promozione saltiamo dentro così
cose di cui parlerò oggi
quanti di voi tra l’ altro quanti di
usi una linterca sul tuo codice così
Jas Lynn Jas e cose del genere va bene
bene quelli di voi che non sono molto bravo
vi incoraggio a farlo, ma abbiamo bisogno di
assicurati di aver capito qualcosa
su istituti di credito che penso sia comunemente
confuso molte persone pensano che i linters
riguardano il controllo della correttezza del programma
e quello non è che non è vero
qualunque sia la correttezza del tuo programma
convalidato da test di unità e anche dalla
eseguendo i tuoi programmi in produzione
è così che sai se il tuo programma è
facendo correttamente ciò che dovrebbe fare
non controlla anche la tua validità
la validità del programma è controllata dal tuo
compilatore analizzando il codice e
controllando per assicurarsi che la grammatica
le regole sono corrette che non stai facendo
cose illegali quelle sono tutte cose che
altri strumenti esistenti lo fanno allora che cos’è
il prestatore per se non è per
correttezza o validità il linter è a
serie di opinioni che probabilmente avete visto
ha prestato questa affermazione in tono spiritoso
il linter ferirà i tuoi sentimenti così
il discorso di oggi è un inverno e potrei
ferisci la tua quota di sentimenti
citare suggerendoti cose che io
penso che tu stia facendo quello che penso sia stupido
nel codice ma provengono tutti dalla stessa cosa
errori che ho fatto quindi sono davvero
parlando principalmente al mio passato come
bene per il resto di noi così, ma nel
allo stesso modo che quando usiamo i linters
sono un insieme di opinioni su come il nostro codice
dovrebbe essere formattato e in stile e e
gli idiomi che dovremmo usare nel
allo stesso modo in cui usiamo i linters per farlo
Voglio che tu prenda questo che dico
tu oggi con un granello di sale
capendo che questi sono solo miei
opinioni e puoi scegliere di usarle
spero che questo sia di vostro interesse e
ti fa fare domande difficili
sul tuo codice parlane con il tuo
squadra ma sei libero di scegliere
quindi quando la chiamiamo una regola è solo una
insieme di opinioni va bene
quindi senza ulteriori indugi, andiamo
avanti e saltare nella prima cosa che
stiamo per saltare in è una discussione
sui tipi sono sicuro che molti di voi hanno
probabilmente sentito la dichiarazione prima del
JavaScript non ha tipi perché è un
linguaggio dinamico e questo è il primo
mito che mi piacerebbe busto per voi
suggerire che JavaScript non ha tipi è
per non capire il meccanismo
qualsiasi
ora il tipo di parola, naturalmente, è molto
controverso a seconda di quale
lo sfondo della lingua da cui vieni se tu
provengono da uno sfondo di battitura statica
qualcosa come Haskell o qualcosa di simile
quella
stai per essere completamente in disaccordo con me
usando il tipo di parola e lo farai
suggeriscimi che sono completamente
abusare di quella parola e usarla
in modo errato, quindi su cosa ricadrà
è che non ho inventato la parola tipo I
è arrivato molto dopo ed è così
in realtà le persone che hanno scritto il
specifica questo è uno snippet dal
specifica di JavaScript che utilizza
i tipi di parole per descrivere e darò
sei una definizione di lavoro sciolta per cosa
parliamo qui una serie di intrinseca
comportamento associato a a
valore particolare per esempio il numero
42 sappiamo oltre a ciò il significato
la vita sappiamo che il numero 42 è a
il tipo numerico è qualcosa che possiamo fare matematica
con possiamo aggiungere e sottrarre e
moltiplicare e dividere quei numeri il
la stringa 42 42 è di tipo diverso
di valore ovviamente potrebbe essere emesso
lo stesso, ma usiamo le stringhe in modo diverso
possiamo catenarli, li dividiamo noi
maiuscole e minuscole facciamo le cose
diversamente con questi diversi tipi
e in effetti le specifiche come vedi
proprio qui dice un equi script
tipo di lingua
sponsorizzare i valori che sono direttamente
manipolato dal programmatore, penso
è molto importante per illustrare il mio
la definizione di lavoro per i tipi è quella
è basato sull’estetica o sul
l’ergonomia di ciò che facciamo nel nostro codice noi
motivo per il valore numero 42
diversamente da noi motivo circa il
stringa 42, quindi questi sono i tipi quindi facciamolo
torna per iniziare a lasciare un po ‘di codice
controllerò un file che ho chiamato
scrivi CS e vedremo cosa
Linter ha da dire su alcuni di questi
i tipi vanno bene così vediamo subito
tipo di pipistrello di operatore e tipo di null at
il top in cima a tutti i bug preferiti di
JavaScript restituisce il tipo di null
oggetto è semplicemente semplice vecchio è a
bug che avrebbe dovuto restituire il
stringa null ma diamo un’occhiata ad alcuni di
gli altri stanno più bene
comportarsi tipo di rendimenti non definiti
tipo indefinito di valori restituiti booleani
stringa numero oggetto e poi giù a
il fondo che vedi funziona ora
sarebbe perdonato come lo ero per molti
anni se pensavi che la funzione fosse
un tipo reale, infatti, se torniamo a
le funzioni specifiche non lo sono
sono davvero un tipo in realtà
come un sottotipo un sottotipo dell’oggetto
tipo e sappiamo che tutte le funzioni sono
oggetti sono sicuro che tu l’abbia sentito
prima, ma come sottotipo di oggetti è
probabilmente più appropriato a cui pensare
funziona come oggetti chiamabili ci sono
oggetti che hanno questo speciale
capacità che possono essere chiamati ma
di nuovo dall’ergonomia del
linguaggio vediamo quel tipo di funzione
restituisce la funzione di stringa, quindi ragioniamo
sulle funzioni molto diversamente da noi
fare su oggetti generali quindi penso che sia
appropriato almeno dall’ergonomia
pensarlo come un tipo o piuttosto
forse è un sottotipo va bene così il typeof
l’operatore restituisce uno di questi sei
stringhe questo è es cinque e sotto
ce n’è una nuova che viene aggiunta come
di es6 ma non ci tufferemo in quello oggi
quindi una delle sei possibili stringhe può essere
restituito e corrispondono direttamente
con i tipi che la specifica chiama
questo è il mio caso per il motivo per cui questi sono tipi
quindi se hai intenzione di discutere e dire bene
avrebbe dovuto essere chiamato tag o
qualcosa del genere lo riprende con
autori di spec. per quanto mi riguarda
modo scrivo il mio codice motivo per il
il numero 42 e la stringa 42 in modo diverso
okay, vediamo se il linter ha avuto
nulla di dirci quando si stava controllando
queste cose è che ci ha dato un paio di
avvisi di sicuro l’avvertimento
su typeof null essendo buggy e anche
ci dà un avvertimento che anche se
il tipo di funzione restituisce quell’oggetto
sottotipo dovremmo stare attenti che è un
dovrebbe fare attenzione a questo tipo
nuances un’altra cosa da sottolineare
la via se non fosse ovvio per te
in JavaScript quando abbiamo dinamica
dattilografia o non tipo di controllo nel nostro
linguaggio abbiamo tipi ma non lo sono
impone ciò che significa veramente è quello
in JavaScript le variabili non hanno
tipi di valori hanno tipi il valore 42 ha
un comportamento intrinseco ad esso associato
che è matematico che è numerico
quindi il valore 42 ha il tipo di numero
ma la variabile che è attualmente
tenendo premuto 42 non ha alcun tipo
è solo un contenitore generale che può
tenere qualsiasi valore di qualsiasi tipo così è
importante tenerlo a mente perché
è diverso dalle altre lingue
con l’esecuzione del tipo in cui non è il
valore che ragioniamo sul tempo ma
è il contenitore che dichiariamo a
contenitore che può contenere interi noi
dichiara un contenitore che può contenere matrici
due stringhe e così via puntatori di array
alle stringhe va bene così ora che noi
capire che ci sono davvero tipi
la prossima cosa che stiamo andando vuole
trattare con lasciami tirare su la pagina man
per odiare la cosa preferita da tutti
che è la coercizione del doppio uguale
operatore di cui molte persone hanno sentito parlare
JavaScript e molte persone hanno sentito
che è il male che non dovremmo essere
usando quel doppio equivale, ma lo farei
respingi e direi che il doppio equivale
in coercizione può effettivamente essere abbastanza
utile e vorrei avvertirti di essere
consapevole di tutto questo hype negativo che
hai sentito dire che stiamo andando avanti
un po ‘di quello e vedi che alcuni di quelli
le ipotesi sono state davvero così divertenti
cerchiamo di tirare la pagina man per il
il doppio è uguale a quanti di voi hanno sentito
questo prima che il doppio equivale controlli il
valore e triple equals controlla il valore
e scrivi sfortunatamente non è vero
in realtà quello che succede è il doppio
equals consente la coercizione e il triplo equals
non autorizza ora la coercizione perché lo fa
importa, io so solo di analizzare la sfumatura
in ambito accademico, in realtà lo fa
conta davvero che conta da a
prospettiva della correttezza, ma conta anche
dal modo in cui ragioniamo su questi
cose se guardi il primo set di
descrizioni che uno dei due di
quelli sembra fare più lavoro e
chiaramente sembra che facciano i tre uguali
più lavoro perché sta controllando entrambi
valore nel tipo, ma se guardiamo come
funziona davvero se guardiamo a cosa
spec dice su come funziona il doppio
equals consente la coercizione e il triplo equals
non consente la coercizione
quindi sembra essere doppio equo
fare più lavoro e in effetti questo orsi
meno test di prestazione con
valori di velo di diversi tipi e te
dovevamo confrontare usando i doppi eguali
contro il triplo è uguale alle regole di coercizione
che attraversano effettivamente prendono un
un po ‘ di tempo non molto siamo
parlando di un paio di microsecondi
differenza, quindi non ne vedrai nessuna
differenze di sorta se hai sentito
la gente dice che usa sempre gli equidi tripli
perché è più veloce è solo divertente
perché nessuno qui sarà
scrivendo programmi dove sarai
facendo decine di milioni di confronti
va bene insieme in un particolare
cosa anche per venire vicino a notare
differenza di quattro o cinque microsecondi
tra i due quindi è davvero reframes
cose ora dovrò interrogare a
un po ‘di autorità qui perché
molti di voi diranno ma ho letto
le parti buone Doug Crockford è un
ragazzo intelligente , sa cosa sta parlando
circa e lui dice che dovremmo sempre
evitare il doppio equamente bene in realtà
questo non è completamente vero perché se tu
vai al suo libro che userò una citazione
da se tu vai a guardare il suo libro lui
dice bla bla bla quando paragona qualsiasi
di questi valori di caduta usano sempre il
il triplo è uguale a destra ma è quella parte
che ho evidenziato lì se vuoi
il tipo di coercizione quindi usa il corto
forma proprio lì nella Bibbia per
JavaScript che tutti hanno preso è
la loro religione per come capire
quale javascript fa Doug Crockford
lui stesso sostiene l’idea che se tu
vuoi tipo coercizione quindi il doppio
forma uguale di quell’operatore il
forma abbreviata di quegli operatori è il
meccanismo appropriato per usare quale
in realtà riformula questo dibattito non lo è
a proposito se piace a Doug Crockford o
non è in realtà su vuoi tipo
coercizione o no e poi lo farai
dire assolutamente che non lo faccio perché sembra
come la magia nera e ci proverò
provaci in un attimo che è così
non ma voglio davvero riformulare questo
dibattito non è che sia cattivo o cattivo o
buggy o magico o uno di questi tipi
di cose è semplicemente una questione di
scegliere come sviluppatore responsabile
questo un meccanismo che si desidera utilizzare è che
uno strumento che vuoi usare o no, quindi facciamolo
tirati su o lasciaci un altro
File Sono sguardo andando ad una serie di coercizione
zand cosa ho provato a fare in questo
il file è venuto con il peggio del
Peggio potrei darti letteralmente un
lista infinita di casi in cui la coercizione
funziona esattamente come ci aspetteremmo
ci sono molti posti in cui
la coercizione è totalmente ragionevole ma lasciami fare
darti un esempio di un elenco di tipi di
i peggiori trasgressori possibili qui io
scelto 24 tipi di casi d’angolo il
peggiori trasgressori possibili che potessimo
venire con la coercizione in questi Falsey
valori che tendono a crearne
stranezza e te ne accorgi
il 24 di loro ho segnato 7 di loro come
noi questo è oops questo è un po ‘trucchi ma
su 24 sono 7 di loro che
sicuramente porta ancora un po ‘
esame e poi ci sono 17 di
loro che sono completamente sani e
ragionevole e che probabilmente non va bene
con quello che hai sentito quale è
che la maggior parte delle persone suggerisce quella coercizione
è tutto il male o è per lo più malvagio e in
infatti il confronto visivamente qui è
che la maggior parte della coercizione è in realtà abbastanza
ragionevole e ragionevole e c’è un
alcuni piccoli casi che dovremmo evitare e
vedremo cosa sono quei casi
cercherò di darti un po ‘di pratica
takeaway per evitare quelle 7 deve ed è
non sarà difficile come te
pensa ma se dovessi provare a fare
questa lista è una lista infinita di
roba davvero coercitiva che è utile
se desideri utilizzarlo nel tuo programma
e 7 trucchi che se si potesse venire
con un semplice insieme di regole come le due
che sto per condividere con te allora
potresti evitare quelle 7 insidie e usarle
questo meccanismo per renderlo migliore più corto
più pulito codice più conciso quindi andiamo
indietro e vedere cosa potrebbe avere il linter
dovevo dire su questo si nota che
chiama quelli 7 ce ne dà un po ‘
avviso quindi per esempio citazione di avviso
zero uguale uguale false usa un non sicuro
uguale eguale coercizione quindi ci sta dicendo
queste cose non sono sicure che non dovresti fare
così sette avvertimenti 17 su 24
i test di coercizione erano perfettamente un difetto
bene e dovremmo evitare i pochi non sicuri
quelli ora se avete problemi con alcuni
di questi casi angolari e delle regole in
Infatti se le regole ti danno problemi che ho
un sacco di bug nel mio codice, ma i tipi sono
quasi mai la cosa che causa bug
nel mio codice ma se tu lotti con
che ci sono strumenti che possono effettivamente
aiutami quindi lascia che ti doni un solo strumento
che mi piace è
limitare la modalità e se si guarda
restringere la modalità org puoi vederlo
avere uno strumento di costruzione non è così
trasforma il tuo codice per la produzione ma
è uno strumento di sviluppo lato sviluppo che
trasformerà il tuo codice andrà
attraverso tutti i luoghi che stai facendo
queste quote-unquote
coercizione non sicura e metterà i controlli
intorno a loro e quindi è possibile eseguire tale
codice con input reale e sputerà
avvertimenti se stai facendo stupido
roba come ad esempio il confronto
le stringhe agli array sono insicure
confronto ma se stai facendo al sicuro
cose come string un numero che in
quasi tutti i casi sono totalmente razionali
folle se stai facendo quelli che non è così
sputare ogni avvertimento quindi se lo sei
lottando con questo e stai dicendo
è troppo difficile per me ragionare
circa sei piccoli piccoli tipi allora
ci sono strumenti che possono aiutare con
che non è un bene, devo evitare tutto
tipi interamente e tutte queste sciocchezze
su cose di fatto gran parte di quel rumore
è fatto nel nostro settore in cui le persone
diciamo che la coercizione è cattiva ed è malvagia e noi
non dovrebbe fare se andate e guardate
il codice delle persone che stanno dicendo
che usano la coercizione su tutto il
posto sì compreso Doug Crockford tu
può aprire il suo codice e usa
la coercizione sia implicite ed esplicite tutto
oltre il luogo perché è una realtà
questo è ciò che è importante così è
davvero più uno di questi casi
dove dice sta facendo come dico non come me
fare
che è ridicolo vero vedi che c’è
qualcosa di più profondo qui abbiamo bisogno di essere di più
responsabile con il nostro codice così limitato
modo org è uno strumento utile e utile
sono altri strumenti là fuori che penso
Facebook sta uscendo con uno strumento
chiamato flusso che sembra stia facendo
qualcosa di molto simile quindi ci sono
strumenti che possono essere fatti e che puoi
crea i tuoi strumenti per fare il tuo
controllando quindi torniamo a
controllando qualche altro codice perché io
menzionato oops
Ho detto che ci sono i sette cattivi
casi, quindi in realtà scegliamo in modo specifico
in quei casi cattivi solo per un momento
ricorda questi sette casi brutti questi sono
gli alti sono ok, quindi ho
li separò dai quattro in alto
e i tre sul fondo il primo
Regola che voglio darti come a
da asporto è che non si dovrebbe mai mai
in ogni caso con zero
eccezioni fanno mai un confronto con
doppio equivale a falso o doppio uguale
vero se lo stai facendo
è sbagliato semplice e semplice fine della storia
il doppio equivale a vero e doppio uguale
faul dovrebbe sempre essere evitato quindi cosa noi
vedi qui sono i primi quattro dei nostri sette
stanno usando il doppio equivale a falso
confronto ora potrei scavare nel reale
ragioni per cui questo è, ma in generale
parlando il motivo per cui dovrebbero essere quelli
evitato è perché inganna il nostro
sviluppatore cervello che il modo in cui esso
ha esplicitamente un booleano su un lato
trucchi nel cervello dei nostri sviluppatori
pensando che dovrebbe prendere l’altro
parte la cosa che non è booleana e
rendilo booleano ma non è quello il
l’algoritmo dice che puoi aprire le specifiche
ed è molto semplice dieci o quindici
linee nella specifica che dice esattamente cosa
per farlo non è magico o casuale o
qualcosa del genere ma le specifiche no
dì se boolean è da un lato a fare il
altra cosa, la tua caduta vede la
l’operatore prova a ingannarci quando lo usiamo
piace così a pensare che è cosa
dovrebbe succedere, ma quando arriveremo
queste cose strane come per esempio
quel falso è uguale alla stringa vuota noi
penserei che dovrebbe prendere questo e
rendilo uguale a un falso e così è
solo una specie di felice incidente che questo
finisce per essere vero ma non è così
quello che sta succedendo di fatto in realtà la maggior parte
queste coercizioni dipendono dal modo
vai attraverso i passaggi la maggior parte di loro
finiscono per convertire in numeri e fare
il confronto dei numeri evita il doppio
è uguale a true ed evita il doppio equals
falso
e abbiamo subito preso quella lista di
sette i trasgressori cattivi e accoppiati in giù
alle tre tre che mostro di essere
sul fondo e non ne tratterrò nessuno
più specificamente sai se scavi
in queste cose c’è c’è
in realtà motivi per cui la linea sette e
otto non lo faresti quasi mai
confronta qualsiasi cosa direttamente con un vuoto
array che è un po ‘ridicolo quando tu
in realtà cerco di esaminare il modo in cui
ciò avverrebbe in un codice reale perché
sappiamo che gli array sono considerati come riferimento
ne avresti già un altro
variabile su qualche altro lato che doveva
avere qualche riferimento in esso
non è comune che questo tipo di
le cose accadono e questo è davvero il
tema che sto cercando di trasmettere qui
è che ti è stato detto e sei stato
credere che la coercizione sia reale
trabocchetto che si spezzerà
ogni singolo programma là fuori e dentro
la realtà non ha molti problemi
che in realtà sorgere se si desidera
Per saperne di più su che dal modo in cui questo
terzo titolo del libro tipi gravi
e grammatica ha un intero come quasi
capitolo di settanta pagine su coercizione x ‘ e
mi occupo specificamente di tutti questi
casi in modo sostanziale se non segui
le regole che ottieni ciò che meriti non lo fanno
essere muti sono le regole
la regola numero uno non usa mai i doppi uguali
vero o doppio è uguale a falso e regola
numero due se i valori possono essere vuoti
durante zero o array dovresti essere
attenzione si dovrebbe forse probabilmente
evitare di usare i doppi uguali in modo tale motivo
sul tuo codice e decidere è
possibile per i valori nel mio
confronti per mai essere una stringa vuota 0 o
sono vuoti bene e se così appena fuori
un’abbondanza di cautela evitarlo ma dentro
tutti gli altri casi oltre a questi due
è letteralmente l’unica regola e io
credi di poter usare tutto il resto
coercizione per rendere il tuo codice più semplice e
più semplice invece di avere
questi doppi uguali su vero e doppio
è uguale a undefined e cose del genere io
penso sia molto meglio usare il genere
di forma tersa ho questo tipo di teoria
per quanto riguarda la codifica, non so se si applica
a chiunque altro, ma ho questa teoria di
codifica che più cose scrivo
più possibilità ci sono per me
rovinare qualcosa quindi preferisco scrivere
meno codice quando può essere terso e fermo
correggi un altro esempio in cui
coercizione ad esempio perché la coercizione può essere
utile è nullo e indefinito se apriamo
up the Specht e la specifica dice che no
uno e definito coercitarsi l’un l’altro e
a nessun altro valore nella lingua che
è in realtà molto utile che possiamo trattare
loro come indistinguibili così ho questo
a e B e notiamo che a e B lo sono
uguali tra loro ma né a né B
è uguale a uno di questi altri
fastidiosi valori chiave falsi perché
si costringono l’un l’altro e no
altri valori quindi la tua scelta è la linea numero quattro
che penso sia molto di più
semplice o cose come la linea 15
stavi dovendo fare le cose molto
esplicitamente con la tripla uguale e
quando le persone ti dicono che è meglio
essere più esplicito non hanno mai hanno sempre
sorvolare sul fatto che tu in realtà
devono fare due confronti ora piuttosto
più di uno, anche se era addirittura piccolo
se triple equals era una piccola coppia di
microsecondi più velocemente quando solo lo si fa
una volta quando lo fai due volte finisce
in realtà essere più lento quindi la realtà è
che ci sia un sacco di divertimento che penso
dovremmo lasciar andare dovremmo iniziare
usando la coercizione a nostro vantaggio nel nostro
codice quindi lasciami bollire questo per te
perché a tutti piacciono i tweetable
protips
usa la coercizione dove è sicuro e
conveniente e non usare la coercizione dove
è pericoloso e semplice essere a
lo sviluppatore responsabile non solo ascolta
al clamore che qualcuno ha detto lungo il
modo o hai avuto qualche bug ed è stato
perché ti sei imbattuto in un caso isolato
non è una ragione sufficiente per
buttando fuori un’intera parte importante di
la nostra lingua piuttosto che correre
dalle cose che sono un po ‘
difficile forse dovremmo correre verso
quelle cose e le imparano e io ho
ti ho appena dato due semplici regole che
dovrebbe aiutare con quello va bene il prossimo
cosa di cui parleremo io
tirerà su la pagina principale per
anonimo, non il gruppo hacker anonimo
le funzioni sono sempre una cattiva idea
ti darò tre semplici ragioni per cui
Penso che non dovresti mai averne mai
circostanze con zero eccezioni utilizzano
espressioni di funzioni anonime nel tuo
codice che danno confuse tracce di stack
e fanno il vostro codice più difficile da leggere I
pensa che dovresti evitarli, quindi facciamolo
tira su Controllerò un non funzionante
tu riconosci il codice come questo nessuno
avere un codice scritto dove hai
click handler e poi chiamate Ajax e
timeout all’interno di quelle cose e noi
nidificare queste cose insieme bene così io
hai tre funzioni che noterai
quello sulle linee uno sulle linee tre e su
linee cinque ho questi anonimi
funziona ora nel momento in cui non lo sono
in realtà parlando di se è in
linea o non sto semplicemente parlando
se si tratta di una funzione anonima
perché ha per esempio la funzione aperta
parentesi chiusa non ha nome lì
questo è ovviamente l’idioma più comune
che vedi e questo è incoraggiato
è una specie di stile Lambda anonimo
incoraggiato da persone che fanno codice e
tutte queste altre lingue intendo e tutte
queste strutture cose come jQuery e
così via
questo è incredibilmente facile e semplice da
tipo di scrivere quel tipo di codice, ma io
ti suggerirei che stai facendo
decisioni di codice errato utilizzando anonimo
funzioni dovresti sempre mettere un nome
lì vediamo se il linter ha avuto
qualsiasi cosa da dire sì tutti e tre di quelli
detto che la funzione non dovrebbe avere un
il nome delle funzioni anonime crea il tuo codice
triste qual è l’alternativa allora se io
dovevano sistemarlo in uno stufato non funk
l’alternativa è semplicemente inserire
nomi così ora ho nomi come gestore
richiesta e risposta nessuno del resto di
il mio codice è cambiato ma invece di farlo
cose ridicole come l’ uso di argomenti
Akali o altri modi bizzarri che conosci
facendo riferimento auto si noterà che
Ho una bella variabile lessicale comoda
nomi come gestore e richiesta di riferimento
a queste funzioni così ti ho promesso
tre motivi per cui il primo è quello
quando dai un nome a una funzione, la esprimi
ti dà un semplice riferimento personale all’interno
di quella funzione
no, non è questa la parola chiave che stiamo per fare
arrivare a questa confusione qui in solo a
momento ma questa parola chiave non è come te
auto-riferimento se si dà una funzione a
nominare quindi un’espressione di funzione un nome
ottieni un riferimento personale in modo che lo faccia
più facile per la ricorsione per l’eliminazione degli eventi
cose del genere danno sempre un nome
e tra l’altro dargli un buon nome no
usare fubar dargli un utile ragionevole
nome come ho fatto qui con handle e
richiesta e risposta quindi è la prima
ragiona la seconda ragione per cui è meglio
e penso che questo da solo stia da solo
come una ragione sufficiente è che quanti
di voi avete mai avuto tracce di stack dove
ha detto funzione anonima e onesta
funzione sai mille volte è
ridicolo e difficile da indovinare
cosa succede se metti un nome sulla tua funzione
espressioni usa il nome e il tuo
impila le tracce in modo da rendere il tuo codice
più facile eseguire il debug soprattutto se si utilizza a
nome ragionevole e soprattutto è vero
se hai questo codice come se fosse tutto
minificato su una riga ed è come
linea di un carattere trentaduemila
settecentododiciotto nessuno sa cosa
questo è, ma se hai dato un utile
e il nome ragionevole hai una migliore
possibilità di comprensione e debug
il tuo codice e la terza e ultima ragione
è che in realtà non può far pensare
è stilisticamente che rende il codice più
leggibile non devo guardare il
contesto circostante della funzione
l’intestazione per la parola risponde per il
risposta alla funzione lì sulla linea 3 come noi
mostra che non devo guardare il
codice circostante per capire cosa
la funzione sta facendo il nome che io
darlo è una sorta di auto- documentazione se io
aveva le funzioni anonime come ho fatto io
nel codice precedente frammento nel
funzioni anonime qui che effettivamente ho
per guardare il contesto che devo andare e
cerca cosa sta facendo e non lo è
che non è utile a nessuno che sia
questo creerà più confusione
per il tuo codice così semplicemente dandogli
nomi quelli sono i tre motivi per sé
riferimento meglio debuggable e migliore
manutenibilità del codice va bene così ci sono
altri problemi e questo sta dicendo
che in questo caso particolare non c’è
davvero qualsiasi valore nell’uso della linea
funzioni annidate ora questo è dove sono
in realtà suggerendo che forse tu
non dovrebbe nemmeno usare le espressioni di funzione
forse dovresti tirare fuori le cose come
dichiarazioni di funzioni come ho fatto qui
perché con le dichiarazioni di funzione
in realtà le cose si fanno molto di più
leggibile
invece di cose nidificazione insieme alla
modo in cui le persone ti hanno sempre detto che non l’ho fatto
modificare nessuna delle funzionalità del mio
codice ma ho usato la dichiarazione di funzione
con quegli stessi nomi e ora le cose sono
molto più ragionevole perché posso guardare
solo alla funzione di gestore e
capire che dopo un timeout chiama
la richiesta e poi posso guardare solo a
la funzione di richiesta e capire che
dopo che un AJAX è tornato chiama solo
la risposta e quindi posso guardare
risposta e vedere quali altre funzioni
chiama e posso ragionare su questi
cose in modo indipendente che rendono il codice
molto più leggibile e manutenibile così
in molti casi ti è stato detto che la usi
queste funzioni inline perché ne hai bisogno
fare chiusure o cose del genere tutto
non ha senso, ci sono molti casi in cui
le dichiarazioni di funzione estratte possono
effettivamente rendere il codice più leggibile okay
andare avanti oh c’è un problema con quello
codice che noterete che io sottilmente
ha introdotto un iffy e anonimo se lui
qui proprio qui in alto, anonimo
se anche lui non dovrebbe esistere
nessuna funzione anonima periodo n
eccezioni quindi dovremmo semplicemente inserire a
nome come ad esempio dicendo I IFE
o dargli qualche altro nome
rappresenta ciò che sta facendo quel file o
qualcosa del genere gli dà un utile
nome ma non usare funzioni anonime
okay, questo è tutto per il mio discorso per il mio
discussione su quello saliamo a molto
argomento correlato che è lo scopo, quindi facciamolo
tira su la pagina principale per scope e io
voglio andare rapidamente attraverso questo ma io
voglio solo sottolineare che var la var
parola chiave può a volte confondere e anche
abusare della tua funzione portata e non c’è
questa cosa si chiama scope scope che è
futuro nuovo per la lingua che stiamo andando
parlare del perché è utile perché
la scopatura a blocchi può effettivamente aiutare
Non sto dicendo di sostituire tutti i tuoi
codice con quello, ma è molto utile per
fai scopare il blocco dove è possibile così
diamo un’occhiata a un pezzo particolarmente brutto
di codice ho appena fatto questo codice ma dentro
questo brutto pezzo di codice che cosa noti
è che abbiamo queste parole chiave VAR
sparsi per tutto questo codice
e quanti di voi l’hanno mai sentito
vecchio adagio che dice che dovresti farlo manualmente
issare tutti i tuoi VAR in cima al tuo
Funziona qualcuno ha solo un grande lungo
bar l’ho fatto tante volte
quindi sfortunatamente non è così
in realtà finiscono per creare una panacea in
In questo caso abbiamo questi VAR che sono
annidato all’interno di questi blocchi inline e
è fonte di confusione o meno che siano
destinato ad essere utilizzato solo per il blocco
o se stiamo ricorrendo implicitamente
Le Hawaii pungono o non lo sappiamo nemmeno
quando guardi il codice di qualcuno che è
facendo quello che sta mettendo dentro i VAR
blocchi del genere non sai se loro
l’ho inteso in quel modo o se sono giusti
essere un idiota e questo è il tipo di
problema quindi uno dei motivi per cui
sollevato manualmente nella parte superiore è quello
non c’è confusione finora sparsa
il
può creare problemi quindi è molto comune
per le persone quindi effettuare il sollevamento manuale
come vedremo qui nell’ambito di ambito
a Jas ho sollevato manualmente tutto il mio
variabili in cima quindi non ho più
var mescolando tutto ora se hai
una breve funzione non è un grosso problema ma
se hai funzioni lunghe come molte
le persone tendono a fare e poi inizi a correre
in problemi molto simili dove ora il
il codice è confuso perché se io sono il modo
giù in profondità qui e io sono come aspettare dove
sto venendo da e G e questo tipo di
la cosa era ad un parametro era a un locale
variabile devi scorrere fino in fondo
in alto per trovare una funzione con la variabile
dichiarazione e che può diventare
difficile e penso che il linter
in realtà ha qualcosa da dire a proposito del
pranzi anche tutti i VAR in alto
confondere il punto è sforzare il tuo
I VAR attraverso il codice sono confusi e
metterli tutti in alto è fonte di confusione
quindi ci deve essere da qualche parte nel
medio ed è quel blocco che scopre
è nel mezzo quindi diamo un’occhiata a
la pagina man per il blocco dello scope block
scope dichiara le variabili il più vicino possibile
il loro uso previsto possibile e
li circoscrive solo a un blocco che racchiude
non l’intera funzione se ne hai
esperienza da altre lingue voi
già capisco che è il
principio minimo privilegio o il
il principio di minor esposizione rende il
le variabili vengono utilizzate solo dove ne abbiamo bisogno
per esempio per i loop quando lo fai
VAR è uguale a quello che stai dichiarando
stilisticamente che l’ io è solo
dovrebbe essere usato per il ciclo for così
stai facendo esattamente quello che sei in un
senti stilisticamente bloccare la tua i
ma non è ancora applicato in javascript
che è in realtà il motivo per cui è molto bello
che javascript sta aggiungendo il supporto diretto
a partire da es6 per lo scope scope, quindi se andiamo
nel campo di applicazione 3 si noterà che qui
Sto facendo qualcosa di interessante
effettivamente sto facendo blocchi manuali
creare blocchi espliciti come faccio qui
Sulla linea 12 ho quello che viene chiamato il let
forma di dichiarazione di questa parola chiave il nuovo
lascia che la parola chiave arrivi in es6 e
Sto creando un blocco manuale per questo
scoping of G e sto dicendo solo in questo
il blocco G esiste e non lo usa
al di fuori ora gli script Java in realtà stanno andando
per far rispettare questo se si è tentato di usare G
al di fuori di quel blocco sei in realtà
entrare in errore, che è un bene
cosa per noi, ma lo noteresti anche tu
Posso usare io invece il mio per
le intestazioni e io posso anche lasciarlo
dichiarazioni come let F uguale a C e così via
avanti così ho intenzione di lasciare blah
forma di cui sono un grande fan e lo farò
spiegare che più in un momento o questo
una sorta di sintassi di dichiarazione di fortuna implicita
in entrambi i casi queste variabili finiscono
appartenendo solo ai blocchi che loro
esiste per e da nessun’altra parte lo sono anch’io
Dicendo solo facciamo che ci sono persone su
il comitato tc39 che è registrato è
dicendo che let è la nuova var basta fare a
Trova globale e sostituisci tutti i tuoi VAR
e fallo anche loro , penso che sia così
assolutamente chiaramente assurdo e
ridicolo
Ho intenzione di usare entrambi in questo caso nel mio caso
esempio stupido, ho alcuni VAR perché
queste sono le variabili che sto andando a
utilizzare attraverso l’intera funzione e quindi
Ho dei posti nei miei posti
variabili localizzate che stanno andando solo
essere usato in piccoli posti e per me è così
utile per avere entrambe le parole chiave in gioco
perché è un segnale stilistico per me
quando vedo var che significa usato
ovunque e quando vedo lascia che significhi
usato solo in questo blocco e ho scelto
applicare questo stile al mio codice e
ha reso il mio codice molto più semplice
capisci per me quindi c’è questo intero
cosa con i blocchi let che vogliamo
per parlare torniamo qui e
vedere la parola chiave let non è valida
fino a es6 quindi è una specie di fiasco ma
ci sono modi per aggirare quello là
sono strumenti ma nota questo terzo avvertimento
che ci dà dice che è confuso
che lasciare implicitamente dirottare un blocco
ambito e sono d’accordo con il linter qui
perché ho scritto il linter che è
confondendo è un meccanismo implicito I
avere una dichiarazione if che diventa anche a
blocco di ambito se c’è una dichiarazione
al suo interno che significa che non solo
cercare le funzioni ora ora devi
comincia a cercare tutti
corrispondenza tra parentesi graffa e quindi scansione
l’intero contenuto di quella parentesi graffa
accoppiare per vedere se ce ne sono, sia vero
ovunque, perché puoi mettere
li dove vuoi e c’è
rischi con il sollevamento e tutti i tipi di
le cose quindi è un meccanismo implicito e
Non sono un fan di questo, ma la sintassi
di lasciare blocchi purtroppo vediamo qui
il prossimo è in realtà piatto
sbagliato perché non è nemmeno valido
JavaScript che succhia es6 ha deciso di farlo
rifiuta il blocco let sintassi uno
penso che sia superiore e hanno scelto di farlo
mantenere così quel meccanismo implicito inferiore
fa schifo che preferiremmo fare
questi blocchi espliciti ma quello
forma particolare anche se lo sai
Non ho fatto in su è qualcosa che
Firefox ha avuto per molto tempo, ma hanno
lo ha respinto almeno per ora
JavaScript che significa che possiamo usare
utensili
così ho scritto uno strumento chiamato lettera e questo
lo strumento è progettato per risolvere questo problema
okay e che lettera fa è
trasforma blocchi non standard in
scope JavaScript standard per te
può usare questo come strumento di pre-elaborazione
proprio come si usano altri strumenti di costruzione e
cose del genere è solo un altro passo
nel processo e puoi iniziare a scrivere
con scope scope esplicita e giusta
semplicemente trasforma il tuo codice così tanto
rapidamente cosa fa se non guardiamo
alla portata di Dante , illustrerà
per noi cosa fa lo strumento per le lettere
predefinito per impostazione predefinita sta per dire bene
vuoi traspare fino in fondo
per es 3 in modo da poterlo utilizzare in tutte le odierne
browser in modo che possiamo iniziare con a
blocco come questo e quando usi la lettera
crea questa brutta merda che in realtà
approfitta del fatto che cattura
blocchi o ambito di blocco che è a
fatto poco noto nessuno vuole questo tipo
di roba ma quelli sono gli hack che noi
devono a volte trattare con strumenti e
in effetti molti altri strumenti lo usano lì
sono altri trucchi hacky come ce ne sono
cose in cui puoi attaccare se lui è dentro
lì o puoi fare questa cosa chiamata
c’è una variabile igienica che rinomina
vari altri hack a cui questo capita
essere quello che usa la lettera ma significa
Funziona in realtà lo rafforza se noi
prova a fare riferimento a qualsiasi al di fuori del
il blocco era in effetti veramente errato
il blocco ha riguardato solo il blocco ma esso
scopre che abbiamo un molto meglio
modo di farlo perché quando non lo facciamo
voglio quella brutta cosa quando siamo già
intenzione di utilizzare strumenti per il bridge in
es6 possiamo anche solo accendere l’es6
bandiera in questo strumento lettera e lo farà
prendi lo stesso blocco e invece di
scrivendo quella roba schifosa lo farà
scrivi qualcosa che è valido per te
avviso ho solo un riccio nudo vuoto
coppia di braccialetti lì che è molto idiomatica
in altre lingue ma è molto preso
non comune per le persone a farlo in
JavaScript ma è ancora totalmente utile
quindi possiamo creare questi blocchi espliciti
esattamente come sto facendo qui da solo
oppure possiamo usare la sintassi che ero
suggerendo che Firefox ha avuto per a
while e quindi utilizzare uno strumento, ma io ancora
penso che questa sia una forma molto migliore di
scope scope crea il tuo esplicito nudo
blocchi per questo e poi usa il
lettera in cui la parola chiave let al
in cima a quelli e così noterai il
trasformazione tra le linee 1 e 2 e
le linee 10 e 11 è molto sottile
trasformazione che stanno ancora facendo
comportarsi esattamente allo stesso modo penso linea 1
e 2 è leggermente migliore ed è per questo
lo strumento potrebbe essere utile a voi, ma a
entrambi i casi si dovrebbe usare
Blissett blocco scoping, a mio parere
piuttosto che implicitamente va bene un’ultima cosa
su scoping sono effettivamente i loop loops
beneficio enorme dai loop di scoping del blocco
e lo scope scope risolve problemi fastidiosi
con chiusure e quando ti mostro questo
codice che potrebbe sembrare familiare
a te se hai mai scritto loop con
funzioni dentro di loro e aveva
problemi come per le tue caselle di controllo o
le tue cose lo mostrerò con il tempo
qui fuori ma tornando a quello
qui ho estratto il codice precedente
una versione o uno snippet di esso e
noterai qui che ho questo set
timeout che fa riferimento a un occhio nel
codice precedente quando stavo usando solo
VAR regolari questo codice si romperebbe
perché non si chiude su a
occhio diverso per ogni iterazione ma esso
risulta con la parola chiave let questa let
Io l’occhio non appartiene solo al per
loop in realtà è specificato per appartenere
a ogni iterazione sotto la copertura
JavaScript crea un occhio completamente nuovo per
ogni singola iterazione che significa te
si chiude automaticamente su un altro occhio
per ogni iterazione e chiusura per iniziare
lavorando magicamente con tutto ciò che ho lasciato schifoso
se si tratta di hack per cui tutti abbiamo lavorato
anni lasciamo bloccare voglio dire, affrontiamo
con quattro anelli è in realtà una grande vittoria
risolve molti di questi problemi con
chiusura quindi sono un grande fan del blocco
scoping Penso che dovresti usarlo
il tuo codice penso che dovresti iniziare a usare
ora va bene passiamo alla prossima cosa
parleremo di questa parola chiave
quanti di voi hanno mai avuto lotte
con questa parola chiave è una delle più
comunemente frainteso e tutto e io sono
mostrando alcuni tweet qui dalle persone
che hanno fatto cose folli come questa
fermare il metodo chiama questo che è
Assolutamente pazzia, amo questo nuovo
questo costruttore di punti che passa in questo
cosa sulla terra di queste persone pensano
il fatto semplice e semplice è che nessuno
ha qualche idea di cosa stiano facendo
questa parola chiave la sento dappertutto
mondo tutto il tempo la gente lo suggerisce
sai che questa parola chiave sta facendo
qualcosa quasi ogni post su Stack
Overflow suggerisce tutto solo che è
totale schifo non è assolutamente come
funziona davvero così, in realtà lo voglio
parlaci molto velocemente di quattro
semplici regole su come effettivamente fa
lavoro non è così confuso come te
penso che ci siano quattro regole e lo farò molto
passa rapidamente attraverso di loro la prima regola
è se metti una nuova parola chiave di fronte a
una chiamata di funzione come sto facendo qui su
linea 13 vedrai che qualcosa di nuovo io
metti la nuova parola chiave davanti a a
funzione chiama la nuova parola chiave sta andando
per creare un nuovo
questo vincolante e utilizzare questo legame
per la funzione chiamata non essere confuso
che la nuova parola chiave ha qualcosa
fare con istanza in classi o qualsiasi
di quelle sciocchezze non esiste una cosa del genere
come classi in JavaScript non mi interessa
quello che ti è stato detto o quello che hai
leggere è tutta una sciocchezza
non ci sono classi e queste non lo sono
costruttori questo sta mettendo il nuovo
parola chiave di fronte a una funzione da creare
un oggetto e legalo a questo
parola chiave quindi è il primo controllo delle regole
se il sito di chiamata cerca la
funzione che volevamo capire dentro
di qualcosa funziona qui ciò che è
questa parola chiave indicherà il
la prima cosa è che ha una nuova
la parola chiave di fronte ad essa è la tua prima
regola okay diamo un’occhiata alla prossima regola
Vedrò questo per essere spiritoso e nel
la prossima regola vedrà molto
semplicemente che la seconda regola
la regola numero due è se si inserisce una chiamata punto
o punto applicare al sito di chiamata quindi
stai dicendo manualmente che voglio usare obj
uno come questo vincolante per quello
chiamata di funzione quindi la prima regola lo fa
avere una nuova parola chiave di fronte, se non
andare alla seconda regola non ha un punto
chiamante applicare e, in caso affermativo, che sta andando essere
l’oggetto da usare molto semplice
sono solo due delle nostre quattro regole
già se vuoi scrivere queste regole
su una nota post-it attaccalo al tuo
controlla accanto al post-it con
le tue password e non sarai mai
confuso di nuovo nessuno capisce quello scherzo
è sempre troppo presto la mattina
è che non sarai mai essere confuso su
questa parola chiave mai più
okay diamo un’occhiata alla terza regola
tre Jas oops questo tre JAS tiriamo
questo su e dice va bene ecco il mio
funziona qualcosa che ha ancora il
stessa questa regola tre fa il sito di chiamata
avere un contesto implicito oggetto fuori
sito chiamata probabilmente avete visto che
questo è probabilmente uno dei più comuni
modi in cui le persone invocano metodi come
sono chiamati nelle funzioni JavaScript
che esistono come riferimenti agli oggetti
obj un punto qualcosa dice se nessuno di
le altre due regole hanno applicato quale
non sono qui allora dice la terza regola
utilizzare l’ oggetto contesto implicito al
chiama il sito in altre parole usa obj one as
di questo vincolante e infatti questo è
forse anche se è il terzo di
le regole non sono forse le più
regola comunemente usata nei nostri programmi
se ti rendi conto o meno del
la regola implicita di binding è usata dappertutto
il posto così che è tre dei quattro
regole e questo è piuttosto semplice
e infine il
quarta e ultima regola da guardare se nessuna
di quelle altre regole si applicano a Jas
è la regola di associazione predefinita che abbiamo a
semplice vecchio normale non decorato semplice
chiamata di funzione nuda non c’è niente da fare
esso
solo una normale chiamata non chiama nessuno dei
altre regole applicano le tre regole che
hai chiesto in questo ordine non applicare così
la quarta e ultima regola dice in non
modalità rigorosa che questa parola chiave sta andando
puntare l’ oggetto finestra al globale
oggetto e in modalità rigorosa lo farà
essere indefinito dal modo in cui dovresti
usa sempre la modalità rigorosa, se lo sei
non sei in ritardo all’inizio del gioco
usando la modalità rigorosa della fine della storia
tutto il codice dovrebbe essere rigoroso così in questo
caso se hai attivato la modalità rigorosa
avresti avuto errori precoci perché lo avresti fatto
tentare di accedere a una proprietà al di fuori di
qualcosa invece di ottenerlo
accidentalmente fuori dall’oggetto globale te
iniziando questo fuori da un indefinito
quale sarebbe lanciando voi errori così
tu sicuramente vuoi evitare non rigoroso
modalità e la regola predefinita che il tutto
cosa in cui può essere l’oggetto globale è
una pessima idea fa quattro semplici regole
la nuova parola chiave appare di fronte ad essa
non chiamare una risposta apparire di fronte ad essa
c’è uno obj uno alla chiamata
sito che conosci e un oggetto di contesto
apparire al sito di chiamata e infine il
default rule strict mode undefined non
oggetto globale in modalità rigorosa è così
non c’è letteralmente altra complessità
Ho recuperato tutte le complessità e
bollito fino a quel semplice quattro regole
anche tu puoi essere un maestro di questo
parola chiave un’ultima affermazione che farò
fai su questa parola chiave e poi lo faremo
passare al nostro ultimo argomento è quello
JavaScript es6 sta aggiungendo un nuovo meccanismo
chiamato la funzione freccia e questa freccia
la funzione è totalmente travisata
dalla maggior parte delle persone che stanno parlando
a riguardo perché stanno dicendo bene
si tratta di non dover scrivere il
parola chiave di funzione è in realtà circa
essere in grado di utilizzare questo meccanismo chiamato
lessicale questo e non sono sicuro se
questa è una buona idea ma amo questa idea
Adoro questo tweet di Angus Crawley
ragazzo brillante e ha detto che c’è
in realtà un sacco di bellezza per la dinamica
vincolante di questo e della gente mai
capito così hanno creato un intero
nuovo meccanismo in modo che non avessero
per capirlo che è gentile
ridicolo quanti di voi abbia mai
fatto VAR auto è uguale a questo nel tuo codice
qualcuno ogni volta che vedo qualcuno che fa VAR
auto uguale a questo è quasi certamente un
una dichiarazione che quella persona non ha
capire
questo meccanismo funziona davvero perché
quello sta mescolando i due sta prendendo il
questo meccanismo a cui devi andare
lavoro extra da usare e farlo male
modo e cadere e quando non puoi
capisci che poi torni a
regole lessicali che siamo tutti di più
naturalmente incline a te non dovrebbe essere
mescolando che non dovresti mai fare il VAR
uguale a quello che è ridicola codifica e
la stessa cosa è vera per la freccia
funzione se hai bisogno di lessicale questo
legandosi ti stai sbagliando non lo fai
bisogno della funzione di freccia per te
non ho bisogno di VAR auto uguale a questa scelta
dei due stili per ogni data unità di
codice per ogni logica che conosci sceglierne uno
o l’ altro quando mescoli i due tu
prendi il codice frankenstein ed è giusto
ridicolo quindi il nostro ultimo argomento finale
salteremo dentro è orientato agli oggetti
tutti amano l’orientamento agli oggetti che amo
questa maglietta vorrei aver avuto una possibilità
comprarlo mentre era ancora disponibile
perché in effetti, come ho detto prima, Java
Lo script è senza classi non esiste tale
cosa come classi in JavaScript che hai
è stato insegnato che non hai visto
le persone creano librerie per provare a fingere
Ti deriverò molto rapidamente per te
perché penso che sia una totale assurdità lì
non è una cosa come le classi e persino
quando aggiungono una chiusura anche se
stanno aggiungendo una parola chiave di classe che sei
ancora non saranno classi in JavaScript
quindi la prima cosa è che tutto questo
classe terminologica e confusionaria
eredità e istruttore e istanza
e tutto ciò che è tutto spazzatura che viene
a noi da altri orientati agli oggetti
lingue orientate alla classe nessuna
di quella roba esiste in JavaScript è
insensato che abbiamo sbagliato indirizzo
volevo farlo perché non l’abbiamo mai fatto
pensa di guardare al modo in cui il
il meccanismo funziona davvero
la mia parte peggiore preferita di questo è quando
le persone mettono la parola prototipale di fronte
dell’eredità parola che è
javascript ridicolo ha un
meccanismo chiamato prototipo ma è
assolutamente niente a che fare con le lezioni così
diamo un’occhiata a tutta questa idea
prototipo bene diamo un’occhiata a questo vecchio
idea di inserire la parola prototipo in
Davanti all’eredità non ho molto
di tempo per entrare in questo, ma la parola
l’ereditarietà implica meccanismi di copia entrambi
geneticamente parlando copi il tuo DNA
metaforicamente il progetto nel
casa che si sta costruendo su tutti quelli
in che modo l’ereditarietà riguarda la copia di
Comportamenti e JavaScript per impostazione predefinita
non fa alcuna copia quindi non lo è
appropriato usare la parola ereditarietà
per descrivere il meccanismo di JavaScript ma
alle persone piace mettere la parola prototipale
di fronte a lui e dire no no questo è il nostro
forma speciale di esso
di ereditarietà in JavaScript abbiamo solo
chiamiamola come eredità prototipale
questo è in qualche modo dovuto non farlo
confondere che in realtà lo rende solo
peggio
Mi piace inserire il prototipo di fronte a
l’eredità e fingendo che
inverte come me in mano una mela in
una mano e un’arancia nell’altra e
poi suggerendoti no no non lo è
una mela è solo un’arancia rossa è
assolutamente ridicolo mi guarderesti
come se fossi pazzo, non importa cosa
la parola che ho messo di fronte non lo è
cambia la natura intrinseca che quello
la cosa è una mela quindi non puoi metterla
davanti a lui prototipo e poi ottenere
far finta che ciò non sia fuorviante
le persone a pensare a qualcosa che è
in realtà non è vero quindi cosa c’è di veramente sbagliato
è che è un è un siamo stati dal
molto all’inizio abbiamo usato il
termini sbagliati per queste cose, quindi voglio
per impostare un confronto tra i più
termine comune che tutti conoscono Oh Oh
orientato agli oggetti veramente orientato agli oggetti
significa orientato alla classe oo rispetto a un altro
termine che mi è venuto in mente chiamato Oulu
oggetti collegati ad altri oggetti in effetti
questo è davvero un confronto tra
orientato alla classe e tra ciò che penso
JavaScript avrebbe dovuto essere chiamato tutto
lungo la quale è prevista la delega del comportamento
e voglio mostrarti un paio di
pezzi di codice per illustrare questo
differenza o quello che chiamo stile Oulu
codifica così iniziamo con la
modo tradizionale in cui le persone fanno le cose
che chiamano le classi in JavaScript
classi diagrammaticamente in tradizionale
le lingue orientate alla classe iniziano con
queste copie le frecce vanno da sinistra a
destra e dall’alto verso il basso perché il
le proprietà vengono copiate in istanze e
un bambino finisce in classi di bambini così vediamo
in JavaScript che quando le persone cercano di fare
che non funziona, anche se il
Allo stesso modo che è il motivo per cui tutti usano
questi pazzi framework su di esso così
diamo un’occhiata alla classe J questo è come
le persone fanno o come suggerisce lo sorta di
in modo nativo per fare la codifica orientata alla classe in
JavaScript non ha senso con
costruttori di funzioni e prototipo di punti
e la nuova parola chiave e tutto questo
spazzatura questo è solo un pazzo di codice confuso
c’è una quantità incalcolabile di trucchi che
sono qui che è il motivo per cui nessuno in realtà
scrive codice come questo perché è così
codifica di classe orientata difficile da fare
JavaScript stiamo nuotando finora contro
il flusso tutti sono solo pazzi
grandi librerie complesse per fare classe o
nella codifica per loro che penso
ridicolo se non puoi usare un meccanismo
il modo in cui è stato progettato per essere utilizzato poi
si sta facendo male
non hai bisogno di un’altra libreria tu solo
bisogno di capire come usare il
meccanismo migliore così questo intero prototipo
cosa in questa nuova cosa di keywording questo
sono tutte sciocchezze, non penso che dovremmo
essere farlo e si noterà qui la
Linter ha solo tutti i tipi di avvertimenti
Non intendo nemmeno minimizzare il punto
ci sono tutti i tipi di avvertimenti su
stando attenti a queste cose e
solo riferimenti al prototipo di punti arbitrari
che sono scrivibili e che possono creare
la confusione qui è il vero problema
c’è troppa complessità per il
modello mentale per essere in grado di effettivamente
destreggiarsi tra tutti questi problemi eccone uno
diagramma che ti darò lasciami dare
tu una versione semplice di questo eccone uno
diagramma è un po ‘difficile da leggere qui
ma questi quadrati sono oggetti e il
i cerchi sono funzioni e tu noti
queste relazioni sono queste
prototipi di collegamenti questo è il diagramma
che esiste da quel codice precedente e
in realtà questo è il vero diagramma con
tutte le cose extra coinvolte e c’è
due takeaway sia un ottimista e un
asporto pessimista ottimisticamente il
da asporto ecco che c’è un sacco di
coerenza interna in JavaScript ma
pessimisticamente questa roba è anche troppo
dannatamente difficile nessuno può mantenere questo
roba in testa l’ ho fatto a
molto tempo e non riesco a tenerlo in testa
quindi questo è il problema
non è solo possibile, ma se abbracciamo
invece come JavaScript funziona davvero se
guardiamo che è una delega che usa quello
terminologia si nota che ora le frecce vanno
da destra a sinistra e dal basso verso l’alto
perché in questo particolare scenario ora
la relazione è come in realtà
funziona in JavaScript questi sono live
piuttosto i collegamenti sulla catena del prototipo
di copie di proprietà lungo la catena
e questo è ciò che javascript effettivamente fa
quindi ti darò molto rapidamente
finisci le cose che sto per darti
quello che chiamo codifica in stile Oulu lo fa
esattamente la stessa cosa della precedente
snippet di codice confuso, ma ora lo è
usa e abbraccia questa idea oops no
apri il mio file che abbraccia e questo
idea di Oulu, così ti accorgi che ho ancora
capitale F foo e capitale B bar ma
non sono più funzioni sono
solo oggetti e ora sto mettendo
proprietà direttamente sugli oggetti
noterai che questo snippet di codice è
completamente privo di qualsiasi prototipo di punto
riferimenti o costruttori non c’è
nuova parola chiave pulita non c’è niente di tutto ciò
schifo confusionario
l’ unica cosa che in realtà è la magia
quello che fa accadere è questo oggetto
creare utilità che viene aggiunta in modo nativo
nel linguaggio è un polyfill molto semplice
perché un oggetto creato crea semplicemente
oggetti e li collega e non va
attraverso tutta la fanfara del tentativo di
fingere di essere di classe per fare
Ho scritto molto su questo
è troppo veloce per te capire tutto
del codice ma in realtà è molto
semplice nel secondo di questi
libri questo questo questo e oggetto
prototipi passa attraverso tutto questo
argomento e spiega esattamente come solo
funziona e perché crea codice più semplice
e in effetti non solo codice più semplice ma
ecco il grande profitto che crea più semplice
modelli mentali pure
ecco il nuovo modello sono solo oggetti
collegato ad altri oggetti di cui non abbiamo bisogno
una qualsiasi altra schifezza confusa, quindi io
scusa se ho offeso qualcuno
perché ci sono un sacco di
opinioni qui e sai le opinioni sono
solo per essere presi questi sono solo opinioni
e tu puoi ignorare il linter se tu
voglio così speriamo che non ci sia il cuore
sentimenti
siamo in pausa qui, quindi non lo farò
prendere domande nella nostra sessione, ma se tu
voglio venire e fare domande su di me
sai che durante la nostra pausa è grandioso
ma voglio solo ricordare che si
può raggiungere e dare un feedback
Twitter, per favore, sicuramente assicurati
votare l’app in modo che ci si abitui
feedback e raggiungermi in tutto il
vari modi e dimmi se ho torto o
qualcosa non dimentica i primi tre
persone che vogliono prendere una copia del
libri gratis e ci sono adesivi gratuiti e
buona giornata di conferenze
grazie
distinzione di venire subito dopo
keynote che fa piangere tutti
quindi e devo dire che potresti piangere
ma è per una ragione diversa
a causa della tua codifica JavaScript, ma
entreremo oggi e discuteremo
regole di stucco per JavaScript e di
Certo, questo è un po ‘ più profondo
parlare a livello perché sto per mostrare il codice
e mi aspetto che tu possa seguire
lungo rapidamente sarà un bel po ‘
di codice in realtà non sto facendo live
codifica ma ti mostrerò il codice
e mostrarti le cose dalla mia esperienza
quindi stiamo iniziando con questo è questo
strumento di linting che ho scritto fondamentalmente
dare un insieme di opinioni sul codice così
passeremo davvero il nostro tempo
oggi sulla riga di comando usando questo
strumento di pelatura e se noterete
da vicino questo prestito a tutti ho scritto modo
nel 1995, quando JavaScript è arrivato per la prima volta
è evidente che è uno scherzo perché quello
non era vero ma ho scritto che questo
Linter per cercare di aiutarci a capire
JavaScript perché è quello che spendo
il mio tempo si concentra su solo in modo reale brevemente
Posso darti qualche informazione su
me stesso se non sai chi sono Kyle
Simpson è che non puoi leggere ma
Sono Kyle Simpson ottenere online se sei
nella cosa degli stalking online che puoi
check out get me punto e ha collegamenti
a tutto ciò che devi sapere
su di me e apprezzo il feedback
sia positivo che negativo ottengo le persone
dimmi che sei pieno di merda e io
amo ricevere quel tipo di feedback come
bene quindi sentiti libero di raggiungere e
dare un feedback sicuramente anche assicurarsi
per fare il voto in modo che noi, come gli altoparlanti
può migliorare in quello che facciamo io sono un
open web evangelist Sono di base ad Austin
Texas negli Stati Uniti, ma fondamentalmente
visitare lì in questi giorni perché spendo
il mio tempo sulla strada di cui parlo
JavaScript e insegno JavaScript così come
una piccola spina se la tua azienda è
interessato ad avere qualcuno che venga e
insegnare su JavaScript per favore lasciatemi
so perché mi piacerebbe farlo bene
quindi una specie di setup qui di cui abbiamo bisogno
per capire perché questo discorso è
per di qua
Penso che il nostro settore ne abbia tratto beneficio
tremendamente da libri come JavaScript
le parti buone ma ci ha anche ostacolato
come industria perché credo che sia
ci ha insegnato a sorta di scappare dalla
parti difficili le parti difficili
i libri di cui parlo e il
libri che cavalco e cose del genere
Sto parlando di oggi, infatti, tutto il
insegnando che lo faccio è davvero progettato
adottare l’approccio alternativo alle cose
che invece di dire, releghiamo
noi stessi a un piccolo sottoinsieme del
linguaggio è JavaScript tutte le parti
quindi sono una specie di anti le parti buone
ma questo non significa che sia cattivo
significa solo che stiamo andando andiamo dopo tutto
delle parti di JavaScript che stiamo andando
entra subito in un attimo a parlare
sui tipi e poi sulla coercizione e
quelli sono i tipi di argomenti che
la maggior parte della gente dice oh non ho bisogno di imparare
Dovrei evitare perché ci è stato detto
che sono solo cattivi e sto andando a
prendere l’approccio opposto a quello così
da quando ho menzionato i libri che dovrei
basta andare avanti e fare una rapida presa di
questi libri questo è ciò che non conosci
Serie di libri di Jas e ho alcuni di questi
Ho tre copie quindi non è molto
ma le prime tre persone che vogliono
Vieni e prendi una copia per cui sono anche per
la vendita là fuori penso che stanno dando
20% di sconto ma puoi leggere i libri per
liberare il che non tu non sai Jas
calmo quindi è una serie di libri che ho
scritto tre sto lavorando al quarto
titolo ora ci sarà un totale di
cinque e ho anche adesivi gratuiti se lo sei
interessato così tanto a questo
spazzatura di auto-promozione saltiamo dentro così
cose di cui parlerò oggi
quanti di voi tra l’ altro quanti di
usi una linterca sul tuo codice così
Jas Lynn Jas e cose del genere va bene
bene quelli di voi che non sono molto bravo
vi incoraggio a farlo, ma abbiamo bisogno di
assicurati di aver capito qualcosa
su istituti di credito che penso sia comunemente
confuso molte persone pensano che i linters
riguardano il controllo della correttezza del programma
e quello non è che non è vero
qualunque sia la correttezza del tuo programma
convalidato da test di unità e anche dalla
eseguendo i tuoi programmi in produzione
è così che sai se il tuo programma è
facendo correttamente ciò che dovrebbe fare
non controlla anche la tua validità
la validità del programma è controllata dal tuo
compilatore analizzando il codice e
controllando per assicurarsi che la grammatica
le regole sono corrette che non stai facendo
cose illegali quelle sono tutte cose che
altri strumenti esistenti lo fanno allora che cos’è
il prestatore per se non è per
correttezza o validità il linter è a
serie di opinioni che probabilmente avete visto
ha prestato questa affermazione in tono spiritoso
il linter ferirà i tuoi sentimenti così
il discorso di oggi è un inverno e potrei
ferisci la tua quota di sentimenti
citare suggerendoti cose che io
penso che tu stia facendo quello che penso sia stupido
nel codice ma provengono tutti dalla stessa cosa
errori che ho fatto quindi sono davvero
parlando principalmente al mio passato come
bene per il resto di noi così, ma nel
allo stesso modo che quando usiamo i linters
sono un insieme di opinioni su come il nostro codice
dovrebbe essere formattato e in stile e e
gli idiomi che dovremmo usare nel
allo stesso modo in cui usiamo i linters per farlo
Voglio che tu prenda questo che dico
tu oggi con un granello di sale
capendo che questi sono solo miei
opinioni e puoi scegliere di usarle
spero che questo sia di vostro interesse e
ti fa fare domande difficili
sul tuo codice parlane con il tuo
squadra ma sei libero di scegliere
quindi quando la chiamiamo una regola è solo una
insieme di opinioni va bene
quindi senza ulteriori indugi, andiamo
avanti e saltare nella prima cosa che
stiamo per saltare in è una discussione
sui tipi sono sicuro che molti di voi hanno
probabilmente sentito la dichiarazione prima del
JavaScript non ha tipi perché è un
linguaggio dinamico e questo è il primo
mito che mi piacerebbe busto per voi
suggerire che JavaScript non ha tipi è
per non capire il meccanismo
qualsiasi
ora il tipo di parola, naturalmente, è molto
controverso a seconda di quale
lo sfondo della lingua da cui vieni se tu
provengono da uno sfondo di battitura statica
qualcosa come Haskell o qualcosa di simile
quella
stai per essere completamente in disaccordo con me
usando il tipo di parola e lo farai
suggeriscimi che sono completamente
abusare di quella parola e usarla
in modo errato, quindi su cosa ricadrà
è che non ho inventato la parola tipo I
è arrivato molto dopo ed è così
in realtà le persone che hanno scritto il
specifica questo è uno snippet dal
specifica di JavaScript che utilizza
i tipi di parole per descrivere e darò
sei una definizione di lavoro sciolta per cosa
parliamo qui una serie di intrinseca
comportamento associato a a
valore particolare per esempio il numero
42 sappiamo oltre a ciò il significato
la vita sappiamo che il numero 42 è a
il tipo numerico è qualcosa che possiamo fare matematica
con possiamo aggiungere e sottrarre e
moltiplicare e dividere quei numeri il
la stringa 42 42 è di tipo diverso
di valore ovviamente potrebbe essere emesso
lo stesso, ma usiamo le stringhe in modo diverso
possiamo catenarli, li dividiamo noi
maiuscole e minuscole facciamo le cose
diversamente con questi diversi tipi
e in effetti le specifiche come vedi
proprio qui dice un equi script
tipo di lingua
sponsorizzare i valori che sono direttamente
manipolato dal programmatore, penso
è molto importante per illustrare il mio
la definizione di lavoro per i tipi è quella
è basato sull’estetica o sul
l’ergonomia di ciò che facciamo nel nostro codice noi
motivo per il valore numero 42
diversamente da noi motivo circa il
stringa 42, quindi questi sono i tipi quindi facciamolo
torna per iniziare a lasciare un po ‘di codice
controllerò un file che ho chiamato
scrivi CS e vedremo cosa
Linter ha da dire su alcuni di questi
i tipi vanno bene così vediamo subito
tipo di pipistrello di operatore e tipo di null at
il top in cima a tutti i bug preferiti di
JavaScript restituisce il tipo di null
oggetto è semplicemente semplice vecchio è a
bug che avrebbe dovuto restituire il
stringa null ma diamo un’occhiata ad alcuni di
gli altri stanno più bene
comportarsi tipo di rendimenti non definiti
tipo indefinito di valori restituiti booleani
stringa numero oggetto e poi giù a
il fondo che vedi funziona ora
sarebbe perdonato come lo ero per molti
anni se pensavi che la funzione fosse
un tipo reale, infatti, se torniamo a
le funzioni specifiche non lo sono
sono davvero un tipo in realtà
come un sottotipo un sottotipo dell’oggetto
tipo e sappiamo che tutte le funzioni sono
oggetti sono sicuro che tu l’abbia sentito
prima, ma come sottotipo di oggetti è
probabilmente più appropriato a cui pensare
funziona come oggetti chiamabili ci sono
oggetti che hanno questo speciale
capacità che possono essere chiamati ma
di nuovo dall’ergonomia del
linguaggio vediamo quel tipo di funzione
restituisce la funzione di stringa, quindi ragioniamo
sulle funzioni molto diversamente da noi
fare su oggetti generali quindi penso che sia
appropriato almeno dall’ergonomia
pensarlo come un tipo o piuttosto
forse è un sottotipo va bene così il typeof
l’operatore restituisce uno di questi sei
stringhe questo è es cinque e sotto
ce n’è una nuova che viene aggiunta come
di es6 ma non ci tufferemo in quello oggi
quindi una delle sei possibili stringhe può essere
restituito e corrispondono direttamente
con i tipi che la specifica chiama
questo è il mio caso per il motivo per cui questi sono tipi
quindi se hai intenzione di discutere e dire bene
avrebbe dovuto essere chiamato tag o
qualcosa del genere lo riprende con
autori di spec. per quanto mi riguarda
modo scrivo il mio codice motivo per il
il numero 42 e la stringa 42 in modo diverso
okay, vediamo se il linter ha avuto
nulla di dirci quando si stava controllando
queste cose è che ci ha dato un paio di
avvisi di sicuro l’avvertimento
su typeof null essendo buggy e anche
ci dà un avvertimento che anche se
il tipo di funzione restituisce quell’oggetto
sottotipo dovremmo stare attenti che è un
dovrebbe fare attenzione a questo tipo
nuances un’altra cosa da sottolineare
la via se non fosse ovvio per te
in JavaScript quando abbiamo dinamica
dattilografia o non tipo di controllo nel nostro
linguaggio abbiamo tipi ma non lo sono
impone ciò che significa veramente è quello
in JavaScript le variabili non hanno
tipi di valori hanno tipi il valore 42 ha
un comportamento intrinseco ad esso associato
che è matematico che è numerico
quindi il valore 42 ha il tipo di numero
ma la variabile che è attualmente
tenendo premuto 42 non ha alcun tipo
è solo un contenitore generale che può
tenere qualsiasi valore di qualsiasi tipo così è
importante tenerlo a mente perché
è diverso dalle altre lingue
con l’esecuzione del tipo in cui non è il
valore che ragioniamo sul tempo ma
è il contenitore che dichiariamo a
contenitore che può contenere interi noi
dichiara un contenitore che può contenere matrici
due stringhe e così via puntatori di array
alle stringhe va bene così ora che noi
capire che ci sono davvero tipi
la prossima cosa che stiamo andando vuole
trattare con lasciami tirare su la pagina man
per odiare la cosa preferita da tutti
che è la coercizione del doppio uguale
operatore di cui molte persone hanno sentito parlare
JavaScript e molte persone hanno sentito
che è il male che non dovremmo essere
usando quel doppio equivale, ma lo farei
respingi e direi che il doppio equivale
in coercizione può effettivamente essere abbastanza
utile e vorrei avvertirti di essere
consapevole di tutto questo hype negativo che
hai sentito dire che stiamo andando avanti
un po ‘di quello e vedi che alcuni di quelli
le ipotesi sono state davvero così divertenti
cerchiamo di tirare la pagina man per il
il doppio è uguale a quanti di voi hanno sentito
questo prima che il doppio equivale controlli il
valore e triple equals controlla il valore
e scrivi sfortunatamente non è vero
in realtà quello che succede è il doppio
equals consente la coercizione e il triplo equals
non autorizza ora la coercizione perché lo fa
importa, io so solo di analizzare la sfumatura
in ambito accademico, in realtà lo fa
conta davvero che conta da a
prospettiva della correttezza, ma conta anche
dal modo in cui ragioniamo su questi
cose se guardi il primo set di
descrizioni che uno dei due di
quelli sembra fare più lavoro e
chiaramente sembra che facciano i tre uguali
più lavoro perché sta controllando entrambi
valore nel tipo, ma se guardiamo come
funziona davvero se guardiamo a cosa
spec dice su come funziona il doppio
equals consente la coercizione e il triplo equals
non consente la coercizione
quindi sembra essere doppio equo
fare più lavoro e in effetti questo orsi
meno test di prestazione con
valori di velo di diversi tipi e te
dovevamo confrontare usando i doppi eguali
contro il triplo è uguale alle regole di coercizione
che attraversano effettivamente prendono un
un po ‘ di tempo non molto siamo
parlando di un paio di microsecondi
differenza, quindi non ne vedrai nessuna
differenze di sorta se hai sentito
la gente dice che usa sempre gli equidi tripli
perché è più veloce è solo divertente
perché nessuno qui sarà
scrivendo programmi dove sarai
facendo decine di milioni di confronti
va bene insieme in un particolare
cosa anche per venire vicino a notare
differenza di quattro o cinque microsecondi
tra i due quindi è davvero reframes
cose ora dovrò interrogare a
un po ‘di autorità qui perché
molti di voi diranno ma ho letto
le parti buone Doug Crockford è un
ragazzo intelligente , sa cosa sta parlando
circa e lui dice che dovremmo sempre
evitare il doppio equamente bene in realtà
questo non è completamente vero perché se tu
vai al suo libro che userò una citazione
da se tu vai a guardare il suo libro lui
dice bla bla bla quando paragona qualsiasi
di questi valori di caduta usano sempre il
il triplo è uguale a destra ma è quella parte
che ho evidenziato lì se vuoi
il tipo di coercizione quindi usa il corto
forma proprio lì nella Bibbia per
JavaScript che tutti hanno preso è
la loro religione per come capire
quale javascript fa Doug Crockford
lui stesso sostiene l’idea che se tu
vuoi tipo coercizione quindi il doppio
forma uguale di quell’operatore il
forma abbreviata di quegli operatori è il
meccanismo appropriato per usare quale
in realtà riformula questo dibattito non lo è
a proposito se piace a Doug Crockford o
non è in realtà su vuoi tipo
coercizione o no e poi lo farai
dire assolutamente che non lo faccio perché sembra
come la magia nera e ci proverò
provaci in un attimo che è così
non ma voglio davvero riformulare questo
dibattito non è che sia cattivo o cattivo o
buggy o magico o uno di questi tipi
di cose è semplicemente una questione di
scegliere come sviluppatore responsabile
questo un meccanismo che si desidera utilizzare è che
uno strumento che vuoi usare o no, quindi facciamolo
tirati su o lasciaci un altro
File Sono sguardo andando ad una serie di coercizione
zand cosa ho provato a fare in questo
il file è venuto con il peggio del
Peggio potrei darti letteralmente un
lista infinita di casi in cui la coercizione
funziona esattamente come ci aspetteremmo
ci sono molti posti in cui
la coercizione è totalmente ragionevole ma lasciami fare
darti un esempio di un elenco di tipi di
i peggiori trasgressori possibili qui io
scelto 24 tipi di casi d’angolo il
peggiori trasgressori possibili che potessimo
venire con la coercizione in questi Falsey
valori che tendono a crearne
stranezza e te ne accorgi
il 24 di loro ho segnato 7 di loro come
noi questo è oops questo è un po ‘trucchi ma
su 24 sono 7 di loro che
sicuramente porta ancora un po ‘
esame e poi ci sono 17 di
loro che sono completamente sani e
ragionevole e che probabilmente non va bene
con quello che hai sentito quale è
che la maggior parte delle persone suggerisce quella coercizione
è tutto il male o è per lo più malvagio e in
infatti il confronto visivamente qui è
che la maggior parte della coercizione è in realtà abbastanza
ragionevole e ragionevole e c’è un
alcuni piccoli casi che dovremmo evitare e
vedremo cosa sono quei casi
cercherò di darti un po ‘di pratica
takeaway per evitare quelle 7 deve ed è
non sarà difficile come te
pensa ma se dovessi provare a fare
questa lista è una lista infinita di
roba davvero coercitiva che è utile
se desideri utilizzarlo nel tuo programma
e 7 trucchi che se si potesse venire
con un semplice insieme di regole come le due
che sto per condividere con te allora
potresti evitare quelle 7 insidie e usarle
questo meccanismo per renderlo migliore più corto
più pulito codice più conciso quindi andiamo
indietro e vedere cosa potrebbe avere il linter
dovevo dire su questo si nota che
chiama quelli 7 ce ne dà un po ‘
avviso quindi per esempio citazione di avviso
zero uguale uguale false usa un non sicuro
uguale eguale coercizione quindi ci sta dicendo
queste cose non sono sicure che non dovresti fare
così sette avvertimenti 17 su 24
i test di coercizione erano perfettamente un difetto
bene e dovremmo evitare i pochi non sicuri
quelli ora se avete problemi con alcuni
di questi casi angolari e delle regole in
Infatti se le regole ti danno problemi che ho
un sacco di bug nel mio codice, ma i tipi sono
quasi mai la cosa che causa bug
nel mio codice ma se tu lotti con
che ci sono strumenti che possono effettivamente
aiutami quindi lascia che ti doni un solo strumento
che mi piace è
limitare la modalità e se si guarda
restringere la modalità org puoi vederlo
avere uno strumento di costruzione non è così
trasforma il tuo codice per la produzione ma
è uno strumento di sviluppo lato sviluppo che
trasformerà il tuo codice andrà
attraverso tutti i luoghi che stai facendo
queste quote-unquote
coercizione non sicura e metterà i controlli
intorno a loro e quindi è possibile eseguire tale
codice con input reale e sputerà
avvertimenti se stai facendo stupido
roba come ad esempio il confronto
le stringhe agli array sono insicure
confronto ma se stai facendo al sicuro
cose come string un numero che in
quasi tutti i casi sono totalmente razionali
folle se stai facendo quelli che non è così
sputare ogni avvertimento quindi se lo sei
lottando con questo e stai dicendo
è troppo difficile per me ragionare
circa sei piccoli piccoli tipi allora
ci sono strumenti che possono aiutare con
che non è un bene, devo evitare tutto
tipi interamente e tutte queste sciocchezze
su cose di fatto gran parte di quel rumore
è fatto nel nostro settore in cui le persone
diciamo che la coercizione è cattiva ed è malvagia e noi
non dovrebbe fare se andate e guardate
il codice delle persone che stanno dicendo
che usano la coercizione su tutto il
posto sì compreso Doug Crockford tu
può aprire il suo codice e usa
la coercizione sia implicite ed esplicite tutto
oltre il luogo perché è una realtà
questo è ciò che è importante così è
davvero più uno di questi casi
dove dice sta facendo come dico non come me
fare
che è ridicolo vero vedi che c’è
qualcosa di più profondo qui abbiamo bisogno di essere di più
responsabile con il nostro codice così limitato
modo org è uno strumento utile e utile
sono altri strumenti là fuori che penso
Facebook sta uscendo con uno strumento
chiamato flusso che sembra stia facendo
qualcosa di molto simile quindi ci sono
strumenti che possono essere fatti e che puoi
crea i tuoi strumenti per fare il tuo
controllando quindi torniamo a
controllando qualche altro codice perché io
menzionato oops
Ho detto che ci sono i sette cattivi
casi, quindi in realtà scegliamo in modo specifico
in quei casi cattivi solo per un momento
ricorda questi sette casi brutti questi sono
gli alti sono ok, quindi ho
li separò dai quattro in alto
e i tre sul fondo il primo
Regola che voglio darti come a
da asporto è che non si dovrebbe mai mai
in ogni caso con zero
eccezioni fanno mai un confronto con
doppio equivale a falso o doppio uguale
vero se lo stai facendo
è sbagliato semplice e semplice fine della storia
il doppio equivale a vero e doppio uguale
faul dovrebbe sempre essere evitato quindi cosa noi
vedi qui sono i primi quattro dei nostri sette
stanno usando il doppio equivale a falso
confronto ora potrei scavare nel reale
ragioni per cui questo è, ma in generale
parlando il motivo per cui dovrebbero essere quelli
evitato è perché inganna il nostro
sviluppatore cervello che il modo in cui esso
ha esplicitamente un booleano su un lato
trucchi nel cervello dei nostri sviluppatori
pensando che dovrebbe prendere l’altro
parte la cosa che non è booleana e
rendilo booleano ma non è quello il
l’algoritmo dice che puoi aprire le specifiche
ed è molto semplice dieci o quindici
linee nella specifica che dice esattamente cosa
per farlo non è magico o casuale o
qualcosa del genere ma le specifiche no
dì se boolean è da un lato a fare il
altra cosa, la tua caduta vede la
l’operatore prova a ingannarci quando lo usiamo
piace così a pensare che è cosa
dovrebbe succedere, ma quando arriveremo
queste cose strane come per esempio
quel falso è uguale alla stringa vuota noi
penserei che dovrebbe prendere questo e
rendilo uguale a un falso e così è
solo una specie di felice incidente che questo
finisce per essere vero ma non è così
quello che sta succedendo di fatto in realtà la maggior parte
queste coercizioni dipendono dal modo
vai attraverso i passaggi la maggior parte di loro
finiscono per convertire in numeri e fare
il confronto dei numeri evita il doppio
è uguale a true ed evita il doppio equals
falso
e abbiamo subito preso quella lista di
sette i trasgressori cattivi e accoppiati in giù
alle tre tre che mostro di essere
sul fondo e non ne tratterrò nessuno
più specificamente sai se scavi
in queste cose c’è c’è
in realtà motivi per cui la linea sette e
otto non lo faresti quasi mai
confronta qualsiasi cosa direttamente con un vuoto
array che è un po ‘ridicolo quando tu
in realtà cerco di esaminare il modo in cui
ciò avverrebbe in un codice reale perché
sappiamo che gli array sono considerati come riferimento
ne avresti già un altro
variabile su qualche altro lato che doveva
avere qualche riferimento in esso
non è comune che questo tipo di
le cose accadono e questo è davvero il
tema che sto cercando di trasmettere qui
è che ti è stato detto e sei stato
credere che la coercizione sia reale
trabocchetto che si spezzerà
ogni singolo programma là fuori e dentro
la realtà non ha molti problemi
che in realtà sorgere se si desidera
Per saperne di più su che dal modo in cui questo
terzo titolo del libro tipi gravi
e grammatica ha un intero come quasi
capitolo di settanta pagine su coercizione x ‘ e
mi occupo specificamente di tutti questi
casi in modo sostanziale se non segui
le regole che ottieni ciò che meriti non lo fanno
essere muti sono le regole
la regola numero uno non usa mai i doppi uguali
vero o doppio è uguale a falso e regola
numero due se i valori possono essere vuoti
durante zero o array dovresti essere
attenzione si dovrebbe forse probabilmente
evitare di usare i doppi uguali in modo tale motivo
sul tuo codice e decidere è
possibile per i valori nel mio
confronti per mai essere una stringa vuota 0 o
sono vuoti bene e se così appena fuori
un’abbondanza di cautela evitarlo ma dentro
tutti gli altri casi oltre a questi due
è letteralmente l’unica regola e io
credi di poter usare tutto il resto
coercizione per rendere il tuo codice più semplice e
più semplice invece di avere
questi doppi uguali su vero e doppio
è uguale a undefined e cose del genere io
penso sia molto meglio usare il genere
di forma tersa ho questo tipo di teoria
per quanto riguarda la codifica, non so se si applica
a chiunque altro, ma ho questa teoria di
codifica che più cose scrivo
più possibilità ci sono per me
rovinare qualcosa quindi preferisco scrivere
meno codice quando può essere terso e fermo
correggi un altro esempio in cui
coercizione ad esempio perché la coercizione può essere
utile è nullo e indefinito se apriamo
up the Specht e la specifica dice che no
uno e definito coercitarsi l’un l’altro e
a nessun altro valore nella lingua che
è in realtà molto utile che possiamo trattare
loro come indistinguibili così ho questo
a e B e notiamo che a e B lo sono
uguali tra loro ma né a né B
è uguale a uno di questi altri
fastidiosi valori chiave falsi perché
si costringono l’un l’altro e no
altri valori quindi la tua scelta è la linea numero quattro
che penso sia molto di più
semplice o cose come la linea 15
stavi dovendo fare le cose molto
esplicitamente con la tripla uguale e
quando le persone ti dicono che è meglio
essere più esplicito non hanno mai hanno sempre
sorvolare sul fatto che tu in realtà
devono fare due confronti ora piuttosto
più di uno, anche se era addirittura piccolo
se triple equals era una piccola coppia di
microsecondi più velocemente quando solo lo si fa
una volta quando lo fai due volte finisce
in realtà essere più lento quindi la realtà è
che ci sia un sacco di divertimento che penso
dovremmo lasciar andare dovremmo iniziare
usando la coercizione a nostro vantaggio nel nostro
codice quindi lasciami bollire questo per te
perché a tutti piacciono i tweetable
protips
usa la coercizione dove è sicuro e
conveniente e non usare la coercizione dove
è pericoloso e semplice essere a
lo sviluppatore responsabile non solo ascolta
al clamore che qualcuno ha detto lungo il
modo o hai avuto qualche bug ed è stato
perché ti sei imbattuto in un caso isolato
non è una ragione sufficiente per
buttando fuori un’intera parte importante di
la nostra lingua piuttosto che correre
dalle cose che sono un po ‘
difficile forse dovremmo correre verso
quelle cose e le imparano e io ho
ti ho appena dato due semplici regole che
dovrebbe aiutare con quello va bene il prossimo
cosa di cui parleremo io
tirerà su la pagina principale per
anonimo, non il gruppo hacker anonimo
le funzioni sono sempre una cattiva idea
ti darò tre semplici ragioni per cui
Penso che non dovresti mai averne mai
circostanze con zero eccezioni utilizzano
espressioni di funzioni anonime nel tuo
codice che danno confuse tracce di stack
e fanno il vostro codice più difficile da leggere I
pensa che dovresti evitarli, quindi facciamolo
tira su Controllerò un non funzionante
tu riconosci il codice come questo nessuno
avere un codice scritto dove hai
click handler e poi chiamate Ajax e
timeout all’interno di quelle cose e noi
nidificare queste cose insieme bene così io
hai tre funzioni che noterai
quello sulle linee uno sulle linee tre e su
linee cinque ho questi anonimi
funziona ora nel momento in cui non lo sono
in realtà parlando di se è in
linea o non sto semplicemente parlando
se si tratta di una funzione anonima
perché ha per esempio la funzione aperta
parentesi chiusa non ha nome lì
questo è ovviamente l’idioma più comune
che vedi e questo è incoraggiato
è una specie di stile Lambda anonimo
incoraggiato da persone che fanno codice e
tutte queste altre lingue intendo e tutte
queste strutture cose come jQuery e
così via
questo è incredibilmente facile e semplice da
tipo di scrivere quel tipo di codice, ma io
ti suggerirei che stai facendo
decisioni di codice errato utilizzando anonimo
funzioni dovresti sempre mettere un nome
lì vediamo se il linter ha avuto
qualsiasi cosa da dire sì tutti e tre di quelli
detto che la funzione non dovrebbe avere un
il nome delle funzioni anonime crea il tuo codice
triste qual è l’alternativa allora se io
dovevano sistemarlo in uno stufato non funk
l’alternativa è semplicemente inserire
nomi così ora ho nomi come gestore
richiesta e risposta nessuno del resto di
il mio codice è cambiato ma invece di farlo
cose ridicole come l’ uso di argomenti
Akali o altri modi bizzarri che conosci
facendo riferimento auto si noterà che
Ho una bella variabile lessicale comoda
nomi come gestore e richiesta di riferimento
a queste funzioni così ti ho promesso
tre motivi per cui il primo è quello
quando dai un nome a una funzione, la esprimi
ti dà un semplice riferimento personale all’interno
di quella funzione
no, non è questa la parola chiave che stiamo per fare
arrivare a questa confusione qui in solo a
momento ma questa parola chiave non è come te
auto-riferimento se si dà una funzione a
nominare quindi un’espressione di funzione un nome
ottieni un riferimento personale in modo che lo faccia
più facile per la ricorsione per l’eliminazione degli eventi
cose del genere danno sempre un nome
e tra l’altro dargli un buon nome no
usare fubar dargli un utile ragionevole
nome come ho fatto qui con handle e
richiesta e risposta quindi è la prima
ragiona la seconda ragione per cui è meglio
e penso che questo da solo stia da solo
come una ragione sufficiente è che quanti
di voi avete mai avuto tracce di stack dove
ha detto funzione anonima e onesta
funzione sai mille volte è
ridicolo e difficile da indovinare
cosa succede se metti un nome sulla tua funzione
espressioni usa il nome e il tuo
impila le tracce in modo da rendere il tuo codice
più facile eseguire il debug soprattutto se si utilizza a
nome ragionevole e soprattutto è vero
se hai questo codice come se fosse tutto
minificato su una riga ed è come
linea di un carattere trentaduemila
settecentododiciotto nessuno sa cosa
questo è, ma se hai dato un utile
e il nome ragionevole hai una migliore
possibilità di comprensione e debug
il tuo codice e la terza e ultima ragione
è che in realtà non può far pensare
è stilisticamente che rende il codice più
leggibile non devo guardare il
contesto circostante della funzione
l’intestazione per la parola risponde per il
risposta alla funzione lì sulla linea 3 come noi
mostra che non devo guardare il
codice circostante per capire cosa
la funzione sta facendo il nome che io
darlo è una sorta di auto- documentazione se io
aveva le funzioni anonime come ho fatto io
nel codice precedente frammento nel
funzioni anonime qui che effettivamente ho
per guardare il contesto che devo andare e
cerca cosa sta facendo e non lo è
che non è utile a nessuno che sia
questo creerà più confusione
per il tuo codice così semplicemente dandogli
nomi quelli sono i tre motivi per sé
riferimento meglio debuggable e migliore
manutenibilità del codice va bene così ci sono
altri problemi e questo sta dicendo
che in questo caso particolare non c’è
davvero qualsiasi valore nell’uso della linea
funzioni annidate ora questo è dove sono
in realtà suggerendo che forse tu
non dovrebbe nemmeno usare le espressioni di funzione
forse dovresti tirare fuori le cose come
dichiarazioni di funzioni come ho fatto qui
perché con le dichiarazioni di funzione
in realtà le cose si fanno molto di più
leggibile
invece di cose nidificazione insieme alla
modo in cui le persone ti hanno sempre detto che non l’ho fatto
modificare nessuna delle funzionalità del mio
codice ma ho usato la dichiarazione di funzione
con quegli stessi nomi e ora le cose sono
molto più ragionevole perché posso guardare
solo alla funzione di gestore e
capire che dopo un timeout chiama
la richiesta e poi posso guardare solo a
la funzione di richiesta e capire che
dopo che un AJAX è tornato chiama solo
la risposta e quindi posso guardare
risposta e vedere quali altre funzioni
chiama e posso ragionare su questi
cose in modo indipendente che rendono il codice
molto più leggibile e manutenibile così
in molti casi ti è stato detto che la usi
queste funzioni inline perché ne hai bisogno
fare chiusure o cose del genere tutto
non ha senso, ci sono molti casi in cui
le dichiarazioni di funzione estratte possono
effettivamente rendere il codice più leggibile okay
andare avanti oh c’è un problema con quello
codice che noterete che io sottilmente
ha introdotto un iffy e anonimo se lui
qui proprio qui in alto, anonimo
se anche lui non dovrebbe esistere
nessuna funzione anonima periodo n
eccezioni quindi dovremmo semplicemente inserire a
nome come ad esempio dicendo I IFE
o dargli qualche altro nome
rappresenta ciò che sta facendo quel file o
qualcosa del genere gli dà un utile
nome ma non usare funzioni anonime
okay, questo è tutto per il mio discorso per il mio
discussione su quello saliamo a molto
argomento correlato che è lo scopo, quindi facciamolo
tira su la pagina principale per scope e io
voglio andare rapidamente attraverso questo ma io
voglio solo sottolineare che var la var
parola chiave può a volte confondere e anche
abusare della tua funzione portata e non c’è
questa cosa si chiama scope scope che è
futuro nuovo per la lingua che stiamo andando
parlare del perché è utile perché
la scopatura a blocchi può effettivamente aiutare
Non sto dicendo di sostituire tutti i tuoi
codice con quello, ma è molto utile per
fai scopare il blocco dove è possibile così
diamo un’occhiata a un pezzo particolarmente brutto
di codice ho appena fatto questo codice ma dentro
questo brutto pezzo di codice che cosa noti
è che abbiamo queste parole chiave VAR
sparsi per tutto questo codice
e quanti di voi l’hanno mai sentito
vecchio adagio che dice che dovresti farlo manualmente
issare tutti i tuoi VAR in cima al tuo
Funziona qualcuno ha solo un grande lungo
bar l’ho fatto tante volte
quindi sfortunatamente non è così
in realtà finiscono per creare una panacea in
In questo caso abbiamo questi VAR che sono
annidato all’interno di questi blocchi inline e
è fonte di confusione o meno che siano
destinato ad essere utilizzato solo per il blocco
o se stiamo ricorrendo implicitamente
Le Hawaii pungono o non lo sappiamo nemmeno
quando guardi il codice di qualcuno che è
facendo quello che sta mettendo dentro i VAR
blocchi del genere non sai se loro
l’ho inteso in quel modo o se sono giusti
essere un idiota e questo è il tipo di
problema quindi uno dei motivi per cui
sollevato manualmente nella parte superiore è quello
non c’è confusione finora sparsa
il
può creare problemi quindi è molto comune
per le persone quindi effettuare il sollevamento manuale
come vedremo qui nell’ambito di ambito
a Jas ho sollevato manualmente tutto il mio
variabili in cima quindi non ho più
var mescolando tutto ora se hai
una breve funzione non è un grosso problema ma
se hai funzioni lunghe come molte
le persone tendono a fare e poi inizi a correre
in problemi molto simili dove ora il
il codice è confuso perché se io sono il modo
giù in profondità qui e io sono come aspettare dove
sto venendo da e G e questo tipo di
la cosa era ad un parametro era a un locale
variabile devi scorrere fino in fondo
in alto per trovare una funzione con la variabile
dichiarazione e che può diventare
difficile e penso che il linter
in realtà ha qualcosa da dire a proposito del
pranzi anche tutti i VAR in alto
confondere il punto è sforzare il tuo
I VAR attraverso il codice sono confusi e
metterli tutti in alto è fonte di confusione
quindi ci deve essere da qualche parte nel
medio ed è quel blocco che scopre
è nel mezzo quindi diamo un’occhiata a
la pagina man per il blocco dello scope block
scope dichiara le variabili il più vicino possibile
il loro uso previsto possibile e
li circoscrive solo a un blocco che racchiude
non l’intera funzione se ne hai
esperienza da altre lingue voi
già capisco che è il
principio minimo privilegio o il
il principio di minor esposizione rende il
le variabili vengono utilizzate solo dove ne abbiamo bisogno
per esempio per i loop quando lo fai
VAR è uguale a quello che stai dichiarando
stilisticamente che l’ io è solo
dovrebbe essere usato per il ciclo for così
stai facendo esattamente quello che sei in un
senti stilisticamente bloccare la tua i
ma non è ancora applicato in javascript
che è in realtà il motivo per cui è molto bello
che javascript sta aggiungendo il supporto diretto
a partire da es6 per lo scope scope, quindi se andiamo
nel campo di applicazione 3 si noterà che qui
Sto facendo qualcosa di interessante
effettivamente sto facendo blocchi manuali
creare blocchi espliciti come faccio qui
Sulla linea 12 ho quello che viene chiamato il let
forma di dichiarazione di questa parola chiave il nuovo
lascia che la parola chiave arrivi in es6 e
Sto creando un blocco manuale per questo
scoping of G e sto dicendo solo in questo
il blocco G esiste e non lo usa
al di fuori ora gli script Java in realtà stanno andando
per far rispettare questo se si è tentato di usare G
al di fuori di quel blocco sei in realtà
entrare in errore, che è un bene
cosa per noi, ma lo noteresti anche tu
Posso usare io invece il mio per
le intestazioni e io posso anche lasciarlo
dichiarazioni come let F uguale a C e così via
avanti così ho intenzione di lasciare blah
forma di cui sono un grande fan e lo farò
spiegare che più in un momento o questo
una sorta di sintassi di dichiarazione di fortuna implicita
in entrambi i casi queste variabili finiscono
appartenendo solo ai blocchi che loro
esiste per e da nessun’altra parte lo sono anch’io
Dicendo solo facciamo che ci sono persone su
il comitato tc39 che è registrato è
dicendo che let è la nuova var basta fare a
Trova globale e sostituisci tutti i tuoi VAR
e fallo anche loro , penso che sia così
assolutamente chiaramente assurdo e
ridicolo
Ho intenzione di usare entrambi in questo caso nel mio caso
esempio stupido, ho alcuni VAR perché
queste sono le variabili che sto andando a
utilizzare attraverso l’intera funzione e quindi
Ho dei posti nei miei posti
variabili localizzate che stanno andando solo
essere usato in piccoli posti e per me è così
utile per avere entrambe le parole chiave in gioco
perché è un segnale stilistico per me
quando vedo var che significa usato
ovunque e quando vedo lascia che significhi
usato solo in questo blocco e ho scelto
applicare questo stile al mio codice e
ha reso il mio codice molto più semplice
capisci per me quindi c’è questo intero
cosa con i blocchi let che vogliamo
per parlare torniamo qui e
vedere la parola chiave let non è valida
fino a es6 quindi è una specie di fiasco ma
ci sono modi per aggirare quello là
sono strumenti ma nota questo terzo avvertimento
che ci dà dice che è confuso
che lasciare implicitamente dirottare un blocco
ambito e sono d’accordo con il linter qui
perché ho scritto il linter che è
confondendo è un meccanismo implicito I
avere una dichiarazione if che diventa anche a
blocco di ambito se c’è una dichiarazione
al suo interno che significa che non solo
cercare le funzioni ora ora devi
comincia a cercare tutti
corrispondenza tra parentesi graffa e quindi scansione
l’intero contenuto di quella parentesi graffa
accoppiare per vedere se ce ne sono, sia vero
ovunque, perché puoi mettere
li dove vuoi e c’è
rischi con il sollevamento e tutti i tipi di
le cose quindi è un meccanismo implicito e
Non sono un fan di questo, ma la sintassi
di lasciare blocchi purtroppo vediamo qui
il prossimo è in realtà piatto
sbagliato perché non è nemmeno valido
JavaScript che succhia es6 ha deciso di farlo
rifiuta il blocco let sintassi uno
penso che sia superiore e hanno scelto di farlo
mantenere così quel meccanismo implicito inferiore
fa schifo che preferiremmo fare
questi blocchi espliciti ma quello
forma particolare anche se lo sai
Non ho fatto in su è qualcosa che
Firefox ha avuto per molto tempo, ma hanno
lo ha respinto almeno per ora
JavaScript che significa che possiamo usare
utensili
così ho scritto uno strumento chiamato lettera e questo
lo strumento è progettato per risolvere questo problema
okay e che lettera fa è
trasforma blocchi non standard in
scope JavaScript standard per te
può usare questo come strumento di pre-elaborazione
proprio come si usano altri strumenti di costruzione e
cose del genere è solo un altro passo
nel processo e puoi iniziare a scrivere
con scope scope esplicita e giusta
semplicemente trasforma il tuo codice così tanto
rapidamente cosa fa se non guardiamo
alla portata di Dante , illustrerà
per noi cosa fa lo strumento per le lettere
predefinito per impostazione predefinita sta per dire bene
vuoi traspare fino in fondo
per es 3 in modo da poterlo utilizzare in tutte le odierne
browser in modo che possiamo iniziare con a
blocco come questo e quando usi la lettera
crea questa brutta merda che in realtà
approfitta del fatto che cattura
blocchi o ambito di blocco che è a
fatto poco noto nessuno vuole questo tipo
di roba ma quelli sono gli hack che noi
devono a volte trattare con strumenti e
in effetti molti altri strumenti lo usano lì
sono altri trucchi hacky come ce ne sono
cose in cui puoi attaccare se lui è dentro
lì o puoi fare questa cosa chiamata
c’è una variabile igienica che rinomina
vari altri hack a cui questo capita
essere quello che usa la lettera ma significa
Funziona in realtà lo rafforza se noi
prova a fare riferimento a qualsiasi al di fuori del
il blocco era in effetti veramente errato
il blocco ha riguardato solo il blocco ma esso
scopre che abbiamo un molto meglio
modo di farlo perché quando non lo facciamo
voglio quella brutta cosa quando siamo già
intenzione di utilizzare strumenti per il bridge in
es6 possiamo anche solo accendere l’es6
bandiera in questo strumento lettera e lo farà
prendi lo stesso blocco e invece di
scrivendo quella roba schifosa lo farà
scrivi qualcosa che è valido per te
avviso ho solo un riccio nudo vuoto
coppia di braccialetti lì che è molto idiomatica
in altre lingue ma è molto preso
non comune per le persone a farlo in
JavaScript ma è ancora totalmente utile
quindi possiamo creare questi blocchi espliciti
esattamente come sto facendo qui da solo
oppure possiamo usare la sintassi che ero
suggerendo che Firefox ha avuto per a
while e quindi utilizzare uno strumento, ma io ancora
penso che questa sia una forma molto migliore di
scope scope crea il tuo esplicito nudo
blocchi per questo e poi usa il
lettera in cui la parola chiave let al
in cima a quelli e così noterai il
trasformazione tra le linee 1 e 2 e
le linee 10 e 11 è molto sottile
trasformazione che stanno ancora facendo
comportarsi esattamente allo stesso modo penso linea 1
e 2 è leggermente migliore ed è per questo
lo strumento potrebbe essere utile a voi, ma a
entrambi i casi si dovrebbe usare
Blissett blocco scoping, a mio parere
piuttosto che implicitamente va bene un’ultima cosa
su scoping sono effettivamente i loop loops
beneficio enorme dai loop di scoping del blocco
e lo scope scope risolve problemi fastidiosi
con chiusure e quando ti mostro questo
codice che potrebbe sembrare familiare
a te se hai mai scritto loop con
funzioni dentro di loro e aveva
problemi come per le tue caselle di controllo o
le tue cose lo mostrerò con il tempo
qui fuori ma tornando a quello
qui ho estratto il codice precedente
una versione o uno snippet di esso e
noterai qui che ho questo set
timeout che fa riferimento a un occhio nel
codice precedente quando stavo usando solo
VAR regolari questo codice si romperebbe
perché non si chiude su a
occhio diverso per ogni iterazione ma esso
risulta con la parola chiave let questa let
Io l’occhio non appartiene solo al per
loop in realtà è specificato per appartenere
a ogni iterazione sotto la copertura
JavaScript crea un occhio completamente nuovo per
ogni singola iterazione che significa te
si chiude automaticamente su un altro occhio
per ogni iterazione e chiusura per iniziare
lavorando magicamente con tutto ciò che ho lasciato schifoso
se si tratta di hack per cui tutti abbiamo lavorato
anni lasciamo bloccare voglio dire, affrontiamo
con quattro anelli è in realtà una grande vittoria
risolve molti di questi problemi con
chiusura quindi sono un grande fan del blocco
scoping Penso che dovresti usarlo
il tuo codice penso che dovresti iniziare a usare
ora va bene passiamo alla prossima cosa
parleremo di questa parola chiave
quanti di voi hanno mai avuto lotte
con questa parola chiave è una delle più
comunemente frainteso e tutto e io sono
mostrando alcuni tweet qui dalle persone
che hanno fatto cose folli come questa
fermare il metodo chiama questo che è
Assolutamente pazzia, amo questo nuovo
questo costruttore di punti che passa in questo
cosa sulla terra di queste persone pensano
il fatto semplice e semplice è che nessuno
ha qualche idea di cosa stiano facendo
questa parola chiave la sento dappertutto
mondo tutto il tempo la gente lo suggerisce
sai che questa parola chiave sta facendo
qualcosa quasi ogni post su Stack
Overflow suggerisce tutto solo che è
totale schifo non è assolutamente come
funziona davvero così, in realtà lo voglio
parlaci molto velocemente di quattro
semplici regole su come effettivamente fa
lavoro non è così confuso come te
penso che ci siano quattro regole e lo farò molto
passa rapidamente attraverso di loro la prima regola
è se metti una nuova parola chiave di fronte a
una chiamata di funzione come sto facendo qui su
linea 13 vedrai che qualcosa di nuovo io
metti la nuova parola chiave davanti a a
funzione chiama la nuova parola chiave sta andando
per creare un nuovo
questo vincolante e utilizzare questo legame
per la funzione chiamata non essere confuso
che la nuova parola chiave ha qualcosa
fare con istanza in classi o qualsiasi
di quelle sciocchezze non esiste una cosa del genere
come classi in JavaScript non mi interessa
quello che ti è stato detto o quello che hai
leggere è tutta una sciocchezza
non ci sono classi e queste non lo sono
costruttori questo sta mettendo il nuovo
parola chiave di fronte a una funzione da creare
un oggetto e legalo a questo
parola chiave quindi è il primo controllo delle regole
se il sito di chiamata cerca la
funzione che volevamo capire dentro
di qualcosa funziona qui ciò che è
questa parola chiave indicherà il
la prima cosa è che ha una nuova
la parola chiave di fronte ad essa è la tua prima
regola okay diamo un’occhiata alla prossima regola
Vedrò questo per essere spiritoso e nel
la prossima regola vedrà molto
semplicemente che la seconda regola
la regola numero due è se si inserisce una chiamata punto
o punto applicare al sito di chiamata quindi
stai dicendo manualmente che voglio usare obj
uno come questo vincolante per quello
chiamata di funzione quindi la prima regola lo fa
avere una nuova parola chiave di fronte, se non
andare alla seconda regola non ha un punto
chiamante applicare e, in caso affermativo, che sta andando essere
l’oggetto da usare molto semplice
sono solo due delle nostre quattro regole
già se vuoi scrivere queste regole
su una nota post-it attaccalo al tuo
controlla accanto al post-it con
le tue password e non sarai mai
confuso di nuovo nessuno capisce quello scherzo
è sempre troppo presto la mattina
è che non sarai mai essere confuso su
questa parola chiave mai più
okay diamo un’occhiata alla terza regola
tre Jas oops questo tre JAS tiriamo
questo su e dice va bene ecco il mio
funziona qualcosa che ha ancora il
stessa questa regola tre fa il sito di chiamata
avere un contesto implicito oggetto fuori
sito chiamata probabilmente avete visto che
questo è probabilmente uno dei più comuni
modi in cui le persone invocano metodi come
sono chiamati nelle funzioni JavaScript
che esistono come riferimenti agli oggetti
obj un punto qualcosa dice se nessuno di
le altre due regole hanno applicato quale
non sono qui allora dice la terza regola
utilizzare l’ oggetto contesto implicito al
chiama il sito in altre parole usa obj one as
di questo vincolante e infatti questo è
forse anche se è il terzo di
le regole non sono forse le più
regola comunemente usata nei nostri programmi
se ti rendi conto o meno del
la regola implicita di binding è usata dappertutto
il posto così che è tre dei quattro
regole e questo è piuttosto semplice
e infine il
quarta e ultima regola da guardare se nessuna
di quelle altre regole si applicano a Jas
è la regola di associazione predefinita che abbiamo a
semplice vecchio normale non decorato semplice
chiamata di funzione nuda non c’è niente da fare
esso
solo una normale chiamata non chiama nessuno dei
altre regole applicano le tre regole che
hai chiesto in questo ordine non applicare così
la quarta e ultima regola dice in non
modalità rigorosa che questa parola chiave sta andando
puntare l’ oggetto finestra al globale
oggetto e in modalità rigorosa lo farà
essere indefinito dal modo in cui dovresti
usa sempre la modalità rigorosa, se lo sei
non sei in ritardo all’inizio del gioco
usando la modalità rigorosa della fine della storia
tutto il codice dovrebbe essere rigoroso così in questo
caso se hai attivato la modalità rigorosa
avresti avuto errori precoci perché lo avresti fatto
tentare di accedere a una proprietà al di fuori di
qualcosa invece di ottenerlo
accidentalmente fuori dall’oggetto globale te
iniziando questo fuori da un indefinito
quale sarebbe lanciando voi errori così
tu sicuramente vuoi evitare non rigoroso
modalità e la regola predefinita che il tutto
cosa in cui può essere l’oggetto globale è
una pessima idea fa quattro semplici regole
la nuova parola chiave appare di fronte ad essa
non chiamare una risposta apparire di fronte ad essa
c’è uno obj uno alla chiamata
sito che conosci e un oggetto di contesto
apparire al sito di chiamata e infine il
default rule strict mode undefined non
oggetto globale in modalità rigorosa è così
non c’è letteralmente altra complessità
Ho recuperato tutte le complessità e
bollito fino a quel semplice quattro regole
anche tu puoi essere un maestro di questo
parola chiave un’ultima affermazione che farò
fai su questa parola chiave e poi lo faremo
passare al nostro ultimo argomento è quello
JavaScript es6 sta aggiungendo un nuovo meccanismo
chiamato la funzione freccia e questa freccia
la funzione è totalmente travisata
dalla maggior parte delle persone che stanno parlando
a riguardo perché stanno dicendo bene
si tratta di non dover scrivere il
parola chiave di funzione è in realtà circa
essere in grado di utilizzare questo meccanismo chiamato
lessicale questo e non sono sicuro se
questa è una buona idea ma amo questa idea
Adoro questo tweet di Angus Crawley
ragazzo brillante e ha detto che c’è
in realtà un sacco di bellezza per la dinamica
vincolante di questo e della gente mai
capito così hanno creato un intero
nuovo meccanismo in modo che non avessero
per capirlo che è gentile
ridicolo quanti di voi abbia mai
fatto VAR auto è uguale a questo nel tuo codice
qualcuno ogni volta che vedo qualcuno che fa VAR
auto uguale a questo è quasi certamente un
una dichiarazione che quella persona non ha
capire
questo meccanismo funziona davvero perché
quello sta mescolando i due sta prendendo il
questo meccanismo a cui devi andare
lavoro extra da usare e farlo male
modo e cadere e quando non puoi
capisci che poi torni a
regole lessicali che siamo tutti di più
naturalmente incline a te non dovrebbe essere
mescolando che non dovresti mai fare il VAR
uguale a quello che è ridicola codifica e
la stessa cosa è vera per la freccia
funzione se hai bisogno di lessicale questo
legandosi ti stai sbagliando non lo fai
bisogno della funzione di freccia per te
non ho bisogno di VAR auto uguale a questa scelta
dei due stili per ogni data unità di
codice per ogni logica che conosci sceglierne uno
o l’ altro quando mescoli i due tu
prendi il codice frankenstein ed è giusto
ridicolo quindi il nostro ultimo argomento finale
salteremo dentro è orientato agli oggetti
tutti amano l’orientamento agli oggetti che amo
questa maglietta vorrei aver avuto una possibilità
comprarlo mentre era ancora disponibile
perché in effetti, come ho detto prima, Java
Lo script è senza classi non esiste tale
cosa come classi in JavaScript che hai
è stato insegnato che non hai visto
le persone creano librerie per provare a fingere
Ti deriverò molto rapidamente per te
perché penso che sia una totale assurdità lì
non è una cosa come le classi e persino
quando aggiungono una chiusura anche se
stanno aggiungendo una parola chiave di classe che sei
ancora non saranno classi in JavaScript
quindi la prima cosa è che tutto questo
classe terminologica e confusionaria
eredità e istruttore e istanza
e tutto ciò che è tutto spazzatura che viene
a noi da altri orientati agli oggetti
lingue orientate alla classe nessuna
di quella roba esiste in JavaScript è
insensato che abbiamo sbagliato indirizzo
volevo farlo perché non l’abbiamo mai fatto
pensa di guardare al modo in cui il
il meccanismo funziona davvero
la mia parte peggiore preferita di questo è quando
le persone mettono la parola prototipale di fronte
dell’eredità parola che è
javascript ridicolo ha un
meccanismo chiamato prototipo ma è
assolutamente niente a che fare con le lezioni così
diamo un’occhiata a tutta questa idea
prototipo bene diamo un’occhiata a questo vecchio
idea di inserire la parola prototipo in
Davanti all’eredità non ho molto
di tempo per entrare in questo, ma la parola
l’ereditarietà implica meccanismi di copia entrambi
geneticamente parlando copi il tuo DNA
metaforicamente il progetto nel
casa che si sta costruendo su tutti quelli
in che modo l’ereditarietà riguarda la copia di
Comportamenti e JavaScript per impostazione predefinita
non fa alcuna copia quindi non lo è
appropriato usare la parola ereditarietà
per descrivere il meccanismo di JavaScript ma
alle persone piace mettere la parola prototipale
di fronte a lui e dire no no questo è il nostro
forma speciale di esso
di ereditarietà in JavaScript abbiamo solo
chiamiamola come eredità prototipale
questo è in qualche modo dovuto non farlo
confondere che in realtà lo rende solo
peggio
Mi piace inserire il prototipo di fronte a
l’eredità e fingendo che
inverte come me in mano una mela in
una mano e un’arancia nell’altra e
poi suggerendoti no no non lo è
una mela è solo un’arancia rossa è
assolutamente ridicolo mi guarderesti
come se fossi pazzo, non importa cosa
la parola che ho messo di fronte non lo è
cambia la natura intrinseca che quello
la cosa è una mela quindi non puoi metterla
davanti a lui prototipo e poi ottenere
far finta che ciò non sia fuorviante
le persone a pensare a qualcosa che è
in realtà non è vero quindi cosa c’è di veramente sbagliato
è che è un è un siamo stati dal
molto all’inizio abbiamo usato il
termini sbagliati per queste cose, quindi voglio
per impostare un confronto tra i più
termine comune che tutti conoscono Oh Oh
orientato agli oggetti veramente orientato agli oggetti
significa orientato alla classe oo rispetto a un altro
termine che mi è venuto in mente chiamato Oulu
oggetti collegati ad altri oggetti in effetti
questo è davvero un confronto tra
orientato alla classe e tra ciò che penso
JavaScript avrebbe dovuto essere chiamato tutto
lungo la quale è prevista la delega del comportamento
e voglio mostrarti un paio di
pezzi di codice per illustrare questo
differenza o quello che chiamo stile Oulu
codifica così iniziamo con la
modo tradizionale in cui le persone fanno le cose
che chiamano le classi in JavaScript
classi diagrammaticamente in tradizionale
le lingue orientate alla classe iniziano con
queste copie le frecce vanno da sinistra a
destra e dall’alto verso il basso perché il
le proprietà vengono copiate in istanze e
un bambino finisce in classi di bambini così vediamo
in JavaScript che quando le persone cercano di fare
che non funziona, anche se il
Allo stesso modo che è il motivo per cui tutti usano
questi pazzi framework su di esso così
diamo un’occhiata alla classe J questo è come
le persone fanno o come suggerisce lo sorta di
in modo nativo per fare la codifica orientata alla classe in
JavaScript non ha senso con
costruttori di funzioni e prototipo di punti
e la nuova parola chiave e tutto questo
spazzatura questo è solo un pazzo di codice confuso
c’è una quantità incalcolabile di trucchi che
sono qui che è il motivo per cui nessuno in realtà
scrive codice come questo perché è così
codifica di classe orientata difficile da fare
JavaScript stiamo nuotando finora contro
il flusso tutti sono solo pazzi
grandi librerie complesse per fare classe o
nella codifica per loro che penso
ridicolo se non puoi usare un meccanismo
il modo in cui è stato progettato per essere utilizzato poi
si sta facendo male
non hai bisogno di un’altra libreria tu solo
bisogno di capire come usare il
meccanismo migliore così questo intero prototipo
cosa in questa nuova cosa di keywording questo
sono tutte sciocchezze, non penso che dovremmo
essere farlo e si noterà qui la
Linter ha solo tutti i tipi di avvertimenti
Non intendo nemmeno minimizzare il punto
ci sono tutti i tipi di avvertimenti su
stando attenti a queste cose e
solo riferimenti al prototipo di punti arbitrari
che sono scrivibili e che possono creare
la confusione qui è il vero problema
c’è troppa complessità per il
modello mentale per essere in grado di effettivamente
destreggiarsi tra tutti questi problemi eccone uno
diagramma che ti darò lasciami dare
tu una versione semplice di questo eccone uno
diagramma è un po ‘difficile da leggere qui
ma questi quadrati sono oggetti e il
i cerchi sono funzioni e tu noti
queste relazioni sono queste
prototipi di collegamenti questo è il diagramma
che esiste da quel codice precedente e
in realtà questo è il vero diagramma con
tutte le cose extra coinvolte e c’è
due takeaway sia un ottimista e un
asporto pessimista ottimisticamente il
da asporto ecco che c’è un sacco di
coerenza interna in JavaScript ma
pessimisticamente questa roba è anche troppo
dannatamente difficile nessuno può mantenere questo
roba in testa l’ ho fatto a
molto tempo e non riesco a tenerlo in testa
quindi questo è il problema
non è solo possibile, ma se abbracciamo
invece come JavaScript funziona davvero se
guardiamo che è una delega che usa quello
terminologia si nota che ora le frecce vanno
da destra a sinistra e dal basso verso l’alto
perché in questo particolare scenario ora
la relazione è come in realtà
funziona in JavaScript questi sono live
piuttosto i collegamenti sulla catena del prototipo
di copie di proprietà lungo la catena
e questo è ciò che javascript effettivamente fa
quindi ti darò molto rapidamente
finisci le cose che sto per darti
quello che chiamo codifica in stile Oulu lo fa
esattamente la stessa cosa della precedente
snippet di codice confuso, ma ora lo è
usa e abbraccia questa idea oops no
apri il mio file che abbraccia e questo
idea di Oulu, così ti accorgi che ho ancora
capitale F foo e capitale B bar ma
non sono più funzioni sono
solo oggetti e ora sto mettendo
proprietà direttamente sugli oggetti
noterai che questo snippet di codice è
completamente privo di qualsiasi prototipo di punto
riferimenti o costruttori non c’è
nuova parola chiave pulita non c’è niente di tutto ciò
schifo confusionario
l’ unica cosa che in realtà è la magia
quello che fa accadere è questo oggetto
creare utilità che viene aggiunta in modo nativo
nel linguaggio è un polyfill molto semplice
perché un oggetto creato crea semplicemente
oggetti e li collega e non va
attraverso tutta la fanfara del tentativo di
fingere di essere di classe per fare
Ho scritto molto su questo
è troppo veloce per te capire tutto
del codice ma in realtà è molto
semplice nel secondo di questi
libri questo questo questo e oggetto
prototipi passa attraverso tutto questo
argomento e spiega esattamente come solo
funziona e perché crea codice più semplice
e in effetti non solo codice più semplice ma
ecco il grande profitto che crea più semplice
modelli mentali pure
ecco il nuovo modello sono solo oggetti
collegato ad altri oggetti di cui non abbiamo bisogno
una qualsiasi altra schifezza confusa, quindi io
scusa se ho offeso qualcuno
perché ci sono un sacco di
opinioni qui e sai le opinioni sono
solo per essere presi questi sono solo opinioni
e tu puoi ignorare il linter se tu
voglio così speriamo che non ci sia il cuore
sentimenti
siamo in pausa qui, quindi non lo farò
prendere domande nella nostra sessione, ma se tu
voglio venire e fare domande su di me
sai che durante la nostra pausa è grandioso
ma voglio solo ricordare che si
può raggiungere e dare un feedback
Twitter, per favore, sicuramente assicurati
votare l’app in modo che ci si abitui
feedback e raggiungermi in tutto il
vari modi e dimmi se ho torto o
qualcosa non dimentica i primi tre
persone che vogliono prendere una copia del
libri gratis e ci sono adesivi gratuiti e
buona giornata di conferenze
grazie
Please follow and like us: