2015-03-22 9 views
7

Non capisco il modo migliore per utilizzare "let" parola chiave ...Non è possibile utilizzare la parola chiave "let" in Safari Javascript?

  • In IE11 e Chrome45 posso usarlo bene
  • In Safari8.0.4, come nelle versioni precedenti di Chrome, dà l'errore "uso imprevisto della parola riservata" let ""
  • In Firefox la parola chiave let funziona solo all'interno di <script type="application/javascript;version=1.7"/>, ma questo tipo di script non è nemmeno riconosciuto come Javascript in IE11, Chrome45, Safari8.

Ecco un JSFiddle che mostra in azione: https://jsfiddle.net/p6cgtyg6/1/

Quindi - non mi dispiace che richiede agli utenti di utilizzare le versioni moderne di loro browser.

E non mi dispiace escludere Safari se onestamente non esiste alcuna versione di Safari che supporti questa parola chiave. (È proprio vero? Perché tutti passano tutto il tempo a preoccuparsi di IE quando Safari sembra molto peggio in termini ES6? Ho perso qualcosa?).

Ma come posso consentire a "let" di funzionare in Firefox senza impedire Chrome/IE? (Non ho ancora trovato link da persone che si lamentano di come il tag script di Firefox si comporta in modo diverso da Chrome e mi sarei aspettato più lamentele, quindi immagino di aver perso qualcosa di ovvio ...)

+1

Perché la mancanza di supporto per * let * un problema? ECMA-262 6th Edition è ancora solo una bozza, molte delle sue funzionalità non sono supportate da tutti i browser. Esistono alcune funzionalità ES5 che non sono ancora supportate. – RobG

+1

"per (var i = 0; i "). Text (c [i] .title) .click (function() {DoStuff (c [i]); }). appendTo (p); } "- questo codice si comporta in modo errato. Il codice più semplice e più pulito è usare "let" all'interno del ciclo for. Non voglio veramente scrivere il codice yuckier adesso quando ES6 è a breve distanza e la maggior parte degli annunci supportati risolverà bene il problema ... –

+0

@LucianWischik non c'è bisogno di 'let' in quel caso, però. molti modi più semplici invece di aggiungere una dipendenza su un compilatore 6 => 5. –

risposta

4

Per quanto riguarda Safari 8, è solo not supported; per quel browser, ti consiglio di utilizzare Babel.

Se si ha la sensazione che this bug non venga corretto in qualsiasi momento, si potrebbe avere uno script in grado di rilevare Firefox che inietta gli script con il valore appropriato per l'attributo type.

Come nota a margine, vorrei consigliare di non utilizzare let blocchi, a meno che non si voglia utilizzare this transpiler e lasciare espressioni che sono will be dropped.

1

Vedi compatibilità del browser di questa parola chiave ES6.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let#Browser_compatibility

anche see this SO post per ES6 rilevamento funzione.

+0

Grazie. Ciò conferma che Safari8 non ha alcun tipo di supporto "let". Mi chiedo della seconda parte della mia domanda: qual è il modo giusto di usare "let" in una pagina che funziona sia in Firefox che in Chrome? Il tuo post di rilevamento delle funzionalità ES6 è stato interessante ma non ha toccato questo aspetto. –

+0

Senza un server che genera i tag script Non riesco a vedere come può essere fatto bene attraverso i browser - in chrome funziona con un tag script come 'script type =" application/javascript "version =" 1.7 "' e anche senza il versione, ma in firefox ha bisogno di 'script type =" application/javascript; version = 1.7 "' – click2install

4

let è una parte della specifica ECMAScript 6 e lo stesso ECMAScript 6 è in stato 'bozza'. Anche nella sua forma incompleta, le sue funzionalità non sono completamente supportate dalle effettive versioni del browser.

Dal momento che si desidera tuffarsi ES6 oggi per la produzione, la soluzione migliore è quella di utilizzare ES6 per ES5 transpiler, quelli più importanti sono Babel e Traceur, che sono disponibili sia come CLI e pacchetti per il sistema di generazione di vostra scelta. Ci sono strumenti online per Babel e Traceur per provarli. L'estensione Scratch JS per Chrome utilizza sia Babel che Traceur ed è eccellente per lo sviluppo e la compilazione di script ES6 se il sistema di generazione non è un'opzione.

Questo è il numero up-to-date comparison table che include il supporto delle funzioni ES6 in entrambi i browser e nei compilatori ES6.

E qui è a great collection di strumenti correlati a ES6.

Problemi correlati