JavaScript: Guía completa. Alessandra Salvaggio

Читать онлайн.
Название JavaScript: Guía completa
Автор произведения Alessandra Salvaggio
Жанр Математика
Серия
Издательство Математика
Год выпуска 0
isbn 9788426727701



Скачать книгу

permite ejecutar operaciones matemáticas. En concreto con abs() obtenemos la parte absoluta (positiva) de un número (en España, getTimezoneOffset devuelve siempre un número negativo).

      Si restamos el resultado de la diferencia en horas entre los dos eventos, obtenemos el espacio que necesitamos para alinear la fecha actual con la fecha de nuestro evento: lo hacemos con setHours().

NOTAExisten diversas funciones que nos permiten elaborar un número con el objeto Math:•abs(): devuelve el valor absoluto de un número.•acos(): devuelve el arcocoseno en radianes.•asin(): devuelve el arcoseno en radianes.•atan(): devuelve el arcotangente como valor numérico comprendido entre ¬Π/2 y Π/2 radianes.•atan2(): devuelve el arcotangente del cociente de sus argumentos.•ceil(): devuelve el valor de su argumento redondeando por exceso al entero más cercano.•cos(): devuelve el coseno expresado en radianes.•exp(): devuelve el valor de e elevado al valor pasado como argumento.•floor(): devuelve el valor de su argumento redondeado por defecto al entero más cercano.•log(): devuelve el logaritmo natural en base e del número pasado como argumento.•max(): devuelve el valor máximo entre los argumentos que le han pasado.•min(): devuelve el valor mínimo entre los argumentos que le han pasado.•pow(): devuelve el valor del primer argumento pasado, elevado al valor del segundo argumento.•random(): devuelve un número aleatorio comprendido entre 0 y 1.•round(): devuelve su argumento redondeado al entero más cercano.•sin(): devuelve el seno expresado en radianes.•sqrt(): devuelve la raíz cuadrada.•tan(): devuelve la tangente.

      Cuando las fechas se indican en la misma referencia horaria, con una instrucción if configuramos los mensajes que la función debe devolver: si el evento es posterior a hoy, es decir, su fecha es mayor que la fecha actual, el mensaje contendrá el número de días que faltan para el event; si no, indicará que la fecha ya ha pasado.

      if (fechaEvento > hoy) {return `Faltan ${(fechaEvento.getTime() - hoy.getTime()) / milsegEnUnDia} días a ${NombreEvento}`;} else {return 'La fecha ya pasó'}

      En nuestro ejemplo, hemos pasado a la función los valores (año-mes-día) para construir una fecha, pero nada nos impide pasar a la función directamente un objeto fecha:

      <script type="text/javascript">function cuantosDias(fecha, evento) {let hoy = new Date();const milsegEnUnDia = 1000 * 60 * 60 * 24hoy.setHours(0, 0, 0, 0);const diferenciaHoras = Math.abs(fecha.getTimezoneOffset() / 60) - Math.abs(hoy.getTimezoneOffset() / 60);hoy.setHours(hoy.getHours() - diferenciaHoras);if (fechaEvento > hoy)return `Faltan ${(fecha.getTime() - hoy.getTime()) / milsegEnUnDia} días para ${evento}`;elsereturn 'La fecha ya pasó'}const fechaEvento =new Date(2017, 11, 25);document.getElementById('output').innerHTML = cuantosDias(fechaEvento, 'Navidad');</script>

       Puedes encontrar este ejemplo en el archivo FuncionesParametros2 .html

      En los ejemplos con los que hemos trabajado hasta ahora, siempre hemos asignado un nombre a las funciones. JavaScript también permite crear funciones anónimas y asignarlas a una variable. Esta operación es posible porque en JavaScript function es un tipo que se puede almacenar en una variable. En otros lenguajes esto no es posible.

      <script type="text/javascript">let suma = function (x,y){return x + y;}console.log(suma(34,67));</script>

       Puedes encontrar este ejemplo en el archivo FuncionesAnonimas .html

      Al utilizar la variable, podemos especificar entre sus paréntesis los parámetros que deseamos utilizar.

      Las funciones anónimas también pueden ser utilizadas como parámetros para otras funciones. A lo largo de este libro, conoceremos ejemplos de este uso.

      Cuando se empiezan a utilizar funciones, es preciso prestar atención al área de validez de variables y constantes, es decir, a las partes del código donde variables y constantes pueden ser utilizadas. En nuestro ejemplo, hemos declarado la constante dia dentro de la función EsFinDeSemana.

      function EsFinDeSemana() { const dia = new Date().getDay(); return dia === 0 || dia === 6;}

      La constante existe solo dentro de la función y no puede ser utilizada fuera de ella. Por esta razón, podemos decir que el área de validez (en inglés scope) de la constante dia es la función esFinDeSemana. También se dice que dia es una constante local de la función esFinDeSemana. El mismo discurso vale para las variables.

      Si definimos una variable o una constante fuera de una función, esta se denomina global y puede ser utilizada en cualquier lugar, incluso en posibles funciones, y mantiene su valor durante toda la ejecución del código.

      Lo que acabamos de explicar es la teoría general referente al área de validez de las variables.

      ECMAScript 6 presenta una aclaración más: el área de validez a nivel de bloque (blocked-level).

      Tanto let como const generan variables y constantes a nivel de bloque.

      Esto significa que, si en una función, por ejemplo, hay un bloque if y una variable o una constante se definen con let o const en el bloque if, estas existirán solo en el bloque y no en toda la función.

      Por ejemplo:

      function miFuncion() {if (true) {let variable = 123;}console.log(variable);}

      La función anterior nos devolvería un error porque variable existe solo en el bloque if y no la podemos utilizar fuera de ella para mostrar el valor en la consola.

      Debemos profundizar en esta cuestión, precisando que let fue introducida a partir de ECMAScript 6 (2015) y no está disponible en las versiones anteriores del programa.

      En las versiones de JavaScript anteriores, para declarar una variable se utilizaba la palabra var, que también se utiliza en ECMAScript 6.

      Tratemos de entender por qué es conveniente utilizar let.

      Las instrucciones:

      var nombreUsuario1 = 'Mario Rossi';let nombreUsuario2 = 'Paolo Bianchi';

      desarrollan exactamente las mismas operaciones:

      •Crean un área de memoria suficientemente amplia para conservar los caracteres de las cadenas.

      •Asignan a esta área el nombre “nombreUsuario1”/“nombreUsuario2”.

      La diferencia entre ambas consiste en su área de validez o scope.

      Ya hemos dicho que el área de validez de let es el bloque. Pues bien, el área de validez de var, en cambio, es la función.

      Veamos un ejemplo para explicarlo mejor; utilizamos una función que acepta como parámetros de entrada un array de números y calcula su suma y su media aritmética.

      function mediaConVar1(numeros) {var suma = 0;for (var indice = 0; indice < numeros.length; indice += 1) {suma += numeros[indice];}var media = suma / numeros.length;return `Los ${numeros.length} números tienen suma=${suma} y media=${media}. El índice es ${indice}`;}

      Ejemplo de uso de la función: