2012-08-22 8 views
16

Eventuali duplicati:
Internet Explorer, Closure Compiler and Trailing Commasproblema per quanto riguarda le virgole finali nel JavaScript

Ho provato comprimere il mio codice JavaScript utilizzando il Closure Compiler e la compilazione del codice generato questi due errori:

JSC_TRAILING_COMMA: errore di analisi. IE8 (e sotto) analizzerà le virgole finali in modo errato per le virgole in letterali di array e oggetto. Se stai prendendo di mira le versioni più nuove di JS , imposta l'opzione language_in appropriata. alla linea 379 carattere 0 fontFamily:. jqTextareaDiv.css ("font-family") sostituire (/ [ " '] {1}/gi, ""),

JSC_TRAILING_COMMA:. Errore di interpretazione IE8 (e al di sotto .) analizzerà finali virgole in Array e oggetti letterali in modo non corretto Se si prendono di mira versioni più recenti di JS, impostare l'opzione language_in appropriato in linea 932 carattere 0 fontFamily:. jqDiv.css ("font-family"),

Questi due errros sembrano fare riferimento a questo codice:

var jqTextareaDiv = obj.target.parent().parent(), 
          style = {  // the current, relevant style rules for the DIV nesting the textarea 
           fontFamily  : jqTextareaDiv.css("font-family").replace(/["']{1}/gi,""), 
           fontSize  : jqTextareaDiv.css("font-size"), 
           fontStyle  : jqTextareaDiv.css("font-style"), 
           fontWeight  : jqTextareaDiv.css("font-weight"), 
           textDecoration : jqTextareaDiv.css("text-decoration"), 
           textAlign  : jqTextareaDiv.css("text-align"), 
           color   : jqTextareaDiv.css("color"), 
          }, 
          jqToolbox = $('#text-edit-toolbox'), 
          jqIndicators = { 
           fontFamily    : $('#font-family-indicator'), 
           fontSize     : $('#font-size-indicator'), 
           fontStyle     : $('#font-format-indicators .font-style'), 
           fontWeight    : $('#font-format-indicators .font-weight'), 
           textDecorationUnderline : $('#font-format-indicators .underline'), 
           textDecorationLineThrough : $('#font-format-indicators .line-through'), 
           textAlignLeft    : $('#text-alignment-indicators .align-left'), 
           textAlignCenter   : $('#text-alignment-indicators .align-center'), 
           textAlignRight   : $('#text-alignment-indicators .align-right'), 
           textAlignJustify   : $('#text-alignment-indicators .align-justify') 
          }; 

Esattamente qual è la virgola finale in questo caso e come posso rimuoverlo senza rompere il codice?

+6

Bene, le virgole finali sono ... quelle finali.) Seguono l'ultimo elemento dell'array/oggetto dichiarato. 'color: jqTextareaDiv.css (" color "),' è quello che ho trovato nel tuo esempio, potrebbe essere ce ne sono altri. In effetti, la loro posizione era data dal messaggio di errore; per risolverli, basta rimuovere le virgole nella stringa errata. – raina77ow

+1

Sembra che la tua espressione regolare, con le virgolette senza escape, potrebbe causare un problema –

+0

E viene indicato anche il motivo per cui vengono rimosse: le virgole finali non vanno bene con IE8-. Se non hai bisogno di supportare queste bestie, imposta l'opzione 'language_in' di conseguenza. – raina77ow

risposta

32

Una virgola finale è una virgola che segue l'elemento finale di un array o oggetto letterale. Quindi, in questo modo:

['a', 'b', 'c',] // with trailing comma 
['a', 'b', 'c'] // without trailing comma 

In questo caso, la virgola finale segue l'ultimo elemento in oggetto letterale:

color   : jqTextareaDiv.css("color"), 

Se si rimuove, si verificherà il comportamento previsto. Con esso lì, IE 9 non piacerà.

+0

Ho trovato e corretto quello, ma non riesco a trovare il primo, cioè (presumibilmente) sulla stessa riga con il metodo .replace() chiamata –

+0

@AndreiOniga Bene, non c'è niente di sbagliato lì. La mia ipotesi è che il compilatore di chiusura si confonda con il '' 'nella regex - prova ad evaderlo' \ "' per dare al compilatore una mano ... – lonesomeday

+0

In realtà, non lo era. Non ho notato quello dopo "colore \t \t: jqTextareaDiv.css (" color ")", solo il secondo. Colpa mia. Grazie! –

2

Hai una virgola finale in color : jqTextareaDiv.css("color"),. Quello sarebbe il primo avvertimento. Il secondo avviso è probabilmente una definizione simile da qualche altra parte nel codice.

3

Questa è la virgola finale:

color   : jqTextareaDiv.css("color"), <<-- 
Problemi correlati