[[js_runtime_enviroment]] === Ambientes de ejecución Netscape creó JavaScript imitando características de Java para aprovechar la promoción que Sun Microsystems realizaba de éste último hacia 1995. Por consecuencia, la sintaxis de JavaScript es familiar para programadores de C/C++ y Java. Es sensitivo a mayúsculas y minúsculas, por lo que resulta más consistente con XHTML que con HTML. Aunque no es obligatorio que cada instrucción en JavaScript termine en punto y coma, se considera buena práctica siempre hacerlo. Los comentarios pueden ser de una o varias líneas como el <>. [#lst_js_comments] .Modo estricto y comentarios de JavaScript [source,js,linenums] ---- 'use strict'; // comentario hasta el final de línea /* comentario que puede extenderse varias líneas */ ---- El código JavaScript es un guión. Es decir, el intérprete ejecutará las líneas una a una en el orden en que aparezcan. La instrucción `'use strict';` (con comillas simples o dobles) indica al intérprete de JavaScript que sólo permita un subconjunto del lenguaje conocido como [.def]*((modo estricto))* {[.en]_link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode[strict mode^]_}, y deshabilite extensiones de compatibilidad hacia atrás que permiten ejecutar código con prácticas que posteriormente se han considerado indebidas. En ES6 el modo estricto es obligatorio e implícito si el código está en un archivo `.js` (llamado módulo JavaScript), por tanto sólo es necesario incluir la instrucción `'use strict';` para código dentro del documento (X)HTML. El código JavaScript puede ejecutarse en varios contextos relacionados con la tecnología web: . Con el pseudoprotocolo `javascript:`. . En un evento intrínseco del documento web. . En el elemento ` ---- Como se puede deducir del <>, JavaScript interpreta el texto entre apóstrofes (`''`) y entre comillas (`""`) como cadenas de caracteres. Las variables no se declaran precedidas por su tipo de datos, sino por la palabra reservada `let`. El ciclo `for` tiene la misma sintaxis de C/C++/Java. Mientras el navegador está cargando un documento web, va mostrando sus elementos (títulos, párrafos, imágenes, tablas, etc.) a medida que los encuentra. Lo mismo pasa con los elementos ` ---- Dado que el código JavaScript en el <> está incrustado en un documento XHTML, los caracteres especiales para definir el marcado como menor que (`<`), mayor que (`>`), y ampersand (`&`) deben ser reemplazados por sus correspondientes entidades, o encerrar el código JavaScript en una sección `CDATA`. En todo caso, el documento (X)HTML debería especificar únicamente contenido, sin estilos ni comportamiento. Por tanto el código JavaScript debe estar en un recurso externo (archivo `.js`) como se verá luego. El link:https://developer.mozilla.org/en-US/docs/Web/API/Console/log[objeto `console`^] dispone de varios métodos convenientes para el reporte de diagnósticos. Por ejemplo, los métodos `console.info()`, `console.warn()`, `console.error()`, y `console.debug()` despliegan una lista de objetos separadas por comas acompañadas de iconos, colores, y otros formatos acordes a su tipo. La consola puede ser limpiada, reportar tiempos transcurridos, probar supuestos ({[.en]_asserts_}), rastrear la pila de invocaciones, entre otras funcionalidades. [[multiplication_tables]] .Ejercicio {exercise} [multiplication_tables, 10 pts] **** En un documento XHTML5, modifique el ejemplo del <> para desplegar en formato tabular en la consola del navegador, las tablas de multiplicar del 1 al 20. Sugerencia: indague en `link:https://developer.mozilla.org/en-US/docs/Web/API/Console[el objeto console^]` un método apropiado para reportar este tipo de información. La tabla debe tener una fila de encabezado, una columna de encabezado y 20x20 = 400 celdas de datos, como se ilustra a continuación. Asegúrese de que su documento sea válido ante los estándares. [source,txt] ---- * | 1 2 3 .. 20 ---+------------------- 1 | 1 2 3 .. 20 2 | 2 4 5 .. 40 3 | 3 6 9 .. 60 .. | .. .. .. .. .. 20 | 20 40 60 .. 400 ---- Nota: la cantidad de valores y el formato de salida depende del navegador. El siguiente código de ejemplo puede adaptarse con ciclos para crear tablas numéricas en JavaScript. [source,js,linenums] ---- let matrix = []; let row1 = []; row1[0] = 1.1; row1[1] = 1.2; row1[2] = 1.3; matrix[0] = row1; let row2 = []; row2[0] = 2.1; row2[1] = 2.2; row2[2] = 2.3; matrix[1] = row2; ... ---- **** {counter2:exercise} [[math_power]] .Ejercicio {exercise} [math_power, 5 pts] **** En un documento XHTML5 escriba una tabla con las primeras 10 potencias naturales de los números 1 a 20. La tabla tendrá una fila de encabezado, una columna de encabezado y 20x10 celdas de datos. Indague sobre el método `Math.pow()`. Recuerde validar su documento. **** {counter2:exercise} //// ToDo: Ejercicio que pida incrementar la tabla de potencias a 20x20. ¿Por qué 19^14 en adelante genera números pares? Explique. El elemento ` ---- [#js_square_list_2_js] .El archivo JavaScript `squares_list2.js` referido en el ejemplo anterior [source,js,linenums] ---- include::listing/squares_list2.js[] ---- [[external_file]] .Ejercicio {exercise} [external_file, 5 pts] **** En los ejercicios sobre las tablas de multiplicar y las tablas de potencias, extraiga el código JavaScript que escribió a uno o varios archivos `.js` externos. Asocie el archivo `.js` en su documento (X)HTML. Asegúrese de que ambas tablas sean desplegadas correctamente en un lugar adecuado del documento. **** {counter2:exercise} En HTML la etiqueta de cierre `` es siempre requerida, aunque el contenido del [.en]_script_ sea vacío. Es decir, siempre se deben escribir de la forma ``. En XHTML se puede tener una etiqueta vacía de la forma `