2012-08-22 21 views
16

Duplicar posibles:
Internet Explorer, Closure Compiler and Trailing Commasproblema relacionado con comas finales de JavaScript

He intentado comprimir mi código JavaScript utilizando la Closure Compiler y la compilación del código generado estos dos errores:

JSC_TRAILING_COMMA: error de análisis. IE8 (y más abajo) analizará las comillas finales en matriz y los literales de objeto incorrectamente. Si se dirige a versiones más nuevas de JS, establezca la opción language_in apropiada. en la línea 379 caracteres 0 fontFamily:. jqTextareaDiv.css ("font-family") reemplazará (/ [ ""] {1}/GI, ""),

JSC_TRAILING_COMMA:. Error de análisis IE8 (y por debajo .) analizará detrás comas en los literales de objeto y matriz de forma incorrecta Si el idioma de nuevas versiones de JS, establezca la opción apropiada en la línea language_in 932 caracteres 0 fontFamily:. jqDiv.css ("font-family"),

Estos dos errros parecen referirse a este código:

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') 
          }; 

Exactamente, ¿cuál es la coma final en este caso y cómo puedo eliminarlo sin romper el código?

+6

Bueno, las comas finales son ... las últimas.) Siguen el último elemento de la matriz/objeto declarado. 'color: jqTextareaDiv.css (" color "),' es el que encontré en tu ejemplo, puede haber otros. De hecho, su ubicación fue dada por mensaje de error; para arreglarlos, simplemente elimine las comas en la cadena errónea. – raina77ow

+1

También parece que su expresión regular, con sus comillas no guardadas, puede estar causando un problema –

+0

Y también se da el motivo para que se eliminen: las comillas finales no van bien con IE8-. Si no necesita admitir estas bestias, simplemente configure la opción 'language_in' en consecuencia. – raina77ow

Respuesta

32

A coma final es una coma que sigue el elemento final en una matriz o un objeto literal. Así como esto:

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

En este caso, la coma final sigue el último elemento en su objeto literal:

color   : jqTextareaDiv.css("color"), 

Si lo quita, se producirá el comportamiento esperado. Con eso allí, IE < 9 no le gustará.

+0

He encontrado y corregido ese, pero no puedo encontrar el primero, eso es (supuestamente) en la misma línea con el método .replace() llame al –

+0

@AndreiOniga Bueno, no hay nada de malo allí. Mi suposición es que el compilador de cierre se confunde con el '" 'en la expresión regular - intente escapándolo' \ "' para darle una mano al compilador ... – lonesomeday

+0

En realidad, no fue así. Simplemente no noté el que está después de "color \t \t: jqTextareaDiv.css (" color ")", solo el segundo. Mi error. ¡Gracias! –

2

Tiene una coma al final en color : jqTextareaDiv.css("color"),. Esa sería la primera advertencia. La segunda advertencia es probablemente una definición similar en otro lugar en su código.

3

Esta es la coma final:

color   : jqTextareaDiv.css("color"), <<-- 
Cuestiones relacionadas