Cuál es mejor: <script type = "text / javascript">… </script> o <script>… </script>

97

Cuál es mejor o más conveniente de usar:

<script type="text/javascript">...</script> 

o

<script>...</script>
pastel de lápiz
fuente
7
Si está utilizando javascript como idioma, por supuesto, el primero es mejor
Chinmayee G
Supongo que la ganancia de rendimiento que obtienes al declarar el script como java-script es insignificante, ¡pero una gran pregunta!
The_Butcher
10
¿La respuesta "correcta" difiere si estamos en Html v4 y Html v5?
Dimitrios Mistriotis
No se trata de cuál es mejor, sino de cuándo usar qué; cuando se usa la declaración HTML5 <!doctype html>, no es necesario usar la sugerencia de tipo MIME type="text/javascript"en una <script>etiqueta, ya que se aplica de manera predeterminada. Por otro lado (no HTML5), es aconsejable y recomendable (con referencia a la sugerencia de tipo MIME type="text/javascript").
nyedidikeke

Respuestas:

137

¿Necesita un atributo de tipo? Si usa HTML5, no. De lo contrario, sí. HTML 4.01 y XHTML 1.0 especifica el typeatributo según se requiera mientras que HTML5 tiene como opcional, por defecto a text/javascript. HTML5 ahora está ampliamente implementado, por lo que si usa el tipo de documento HTML5, <script>...</script>es válido y una buena opción.

En cuanto a lo que debería ir en el atributo type, el tipo MIME application/javascriptregistrado en 2006 está destinado a reemplazar text/javascripty es compatible con las versiones actuales de todos los principales navegadores (incluido Internet Explorer 9). Una cita del RFC relevante :

Por tanto, este documento define text / javascript y text / ecmascript, pero los marca como "obsoletos". Se desaconseja el uso de tipos de medios experimentales y no registrados, como se enumeran en la parte anterior. Los tipos de medios,

  * application/javascript
  * application/ecmascript

que también se definen en este documento, están destinados a un uso común y deben utilizarse en su lugar.

Sin embargo, IE hasta la versión 8 incluida no ejecuta un script dentro de un <script>elemento con un typeatributo de application/javascripto application/ecmascript, por lo que si necesita admitir el IE antiguo, se quedará con text/javascript.

Tim Down
fuente
3
No "necesitas" el typeatributo. Validar contra HTML4.01 o XHTML 1.0 ya no es lo que debería estar haciendo de todos modos, y todos los navegadores admitirán su etiqueta sintext/javascript
Ian Storm Taylor
9
@Ian: En el momento de escribir este artículo, la especificación HTML5 era un borrador de trabajo y aún no se había transformado en su estado actual de objetivo en constante movimiento. Las implementaciones de navegador de HTML5 estaban muy por detrás de donde están ahora. Teniendo esto en cuenta, creo que HTML5 en ese momento no era viable para su uso en la web general y mi respuesta fue absolutamente justa, y siempre incluía el descargo de responsabilidad "si quieres que tu HTML sea válido" . Estoy de acuerdo en que las cosas han avanzado desde entonces y esta respuesta podría funcionar con una revisión, pero no estoy de acuerdo con que escribir páginas web en HTML 4.01 sea ahora siempre algo incorrecto.
Tim Down
1
+1, acabo de descubrir esta pregunta de un engañado. Me recuerda a varias publicaciones en el blog de Anne Van Kesteren, incluido el tipo JavaScript MIME , donde habla de esto. No puedo encontrarlo, pero estaba seguro de que había una publicación en la que recomendaba no usarla typeen absoluto porque funciona en todos los navegadores. Quizás fue alguien más.
Andy E
1
Solo quería decir "gracias" porque estaba tratando de averiguar por qué no se estaba ejecutando un archivo JS "aplicación / javascript" en IE8 y versiones inferiores.
andrewtweber
¿qué pasa con: "texto / javascript; versión = 1.8"?
SparK
10

Ambos funcionarán, pero el estándar xhtml requiere que especifique typetambién:

<script type="text/javascript">..</script> 

<!ELEMENT SCRIPT - - %Script;          -- script statements -->
<!ATTLIST SCRIPT
  charset     %Charset;      #IMPLIED  -- char encoding of linked resource --
  type        %ContentType;  #REQUIRED -- content type of script language --
  src         %URI;          #IMPLIED  -- URI for an external script --
  defer       (defer)        #IMPLIED  -- UA may defer execution of script --
  >

type = content-type [CI] Este atributo especifica el lenguaje de programación del contenido del elemento y anula el lenguaje de programación predeterminado. El lenguaje de secuencias de comandos se especifica como un tipo de contenido (por ejemplo, "texto / javascript"). Los autores deben proporcionar un valor para este atributo. No hay un valor predeterminado para este atributo.

Observa el énfasis anterior.

http://www.w3.org/TR/html4/interact/scripts.html

Nota: A partir de HTML5 (lejano), el typeatributo no es obligatorio y es predeterminado.

Sarfraz
fuente
9

Necesita usar a <script type="text/javascript"> </script>menos que esté usando html5. En ese caso, le recomendamos que prefiera <script> ... </script>(porque el atributo de tipo se especifica de forma predeterminada en ese valor)


fuente
5

Esto es todo lo que se necesita:

<!doctype html>
<script src="/path.js"></script>
chovy
fuente
3

<script type="text/javascript"></script> porque es la forma correcta y compatible con todos los navegadores

pooja
fuente
-2

Con el último Firefox, debo usar:

<script type="text/javascript">...</script>

De lo contrario, es posible que el script no se ejecute correctamente.

Stephen Elliott
fuente