Este capítulo resume brevemente las características de JavaScript que ya hemos aprendido, prestando especial atención a los momentos sutiles.
Las declaraciones están delimitadas por un punto y coma:
alerta('Hola'); alerta('Mundo');
Por lo general, un salto de línea también se trata como un delimitador, por lo que también funcionaría:
alerta('Hola') alerta('Mundo')
Esto se llama "inserción automática de punto y coma". A veces no funciona, por ejemplo:
alert("Habrá un error después de este mensaje") [1, 2].forEach(alerta)
La mayoría de las guías de estilo de código coinciden en que debemos poner un punto y coma después de cada declaración.
No se requieren puntos y coma después de los bloques de código {...}
y las construcciones de sintaxis con ellos como bucles:
función f() { // no se necesita punto y coma después de la declaración de la función } para(;;) { // no se necesita punto y coma después del bucle }
…Pero incluso si podemos poner un punto y coma “extra” en alguna parte, eso no es un error. Será ignorado.
Más en: Estructura del código.
Para habilitar completamente todas las funciones del JavaScript moderno, debemos iniciar los scripts con "use strict"
.
'uso estricto'; ...
La directiva debe estar al principio de un script o al principio del cuerpo de una función.
Sin "use strict"
, todo sigue funcionando, pero algunas funciones se comportan a la antigua usanza, "compatible". Generalmente preferiríamos el comportamiento moderno.
Algunas características modernas del lenguaje (como las clases que estudiaremos en el futuro) habilitan el modo estricto implícitamente.
Más en: El modo moderno, "uso estricto".
Se puede declarar usando:
let
const
(constante, no se puede cambiar)
var
(estilo antiguo, lo veremos más adelante)
Un nombre de variable puede incluir:
Letras y dígitos, pero el primer carácter puede no ser un dígito.
Los caracteres $
y _
son normales, a la par de las letras.
También se permiten alfabetos y jeroglíficos no latinos, pero normalmente no se utilizan.
Las variables se escriben dinámicamente. Pueden almacenar cualquier valor:
sea x = 5; x = "Juan";
Hay 8 tipos de datos:
number
tanto para números de punto flotante como enteros,
bigint
para números enteros de longitud arbitraria,
string
por cuerdas,
boolean
para valores lógicos: true/false
,
null
: un tipo con un único valor null
, que significa "vacío" o "no existe",
undefined
: un tipo con un valor único undefined
, que significa "no asignado",
object
y symbol
: para estructuras de datos complejas e identificadores únicos, aún no los hemos aprendido.
El operador typeof
devuelve el tipo de un valor, con dos excepciones:
typeof null == "objeto" // error en el idioma typeof function(){} == "función" // las funciones se tratan de forma especial
Más en: Variables y tipos de datos.
Usamos un navegador como entorno de trabajo, por lo que las funciones básicas de la interfaz de usuario serán:
prompt(question, [default])
Haga una question
y devuelva lo que el visitante ingresó o null
si hizo clic en "cancelar".
confirm(question)
Haga una question
y sugiera elegir entre Aceptar y Cancelar. La elección se devuelve como true/false
.
alert(message)
Emitir un message
.
Todas estas funciones son modales , pausan la ejecución del código y evitan que el visitante interactúe con la página hasta que responda.
Por ejemplo:
let nombre de usuario = solicitud("¿Su nombre?", "Alice"); let isTeaWanted = confirm("¿Quieres un poco de té?"); alerta( "Visitante: " + nombre de usuario ); // Alicia alert( "Se busca té: " + isTeaWanted ); // verdadero
Más en: Interacción: alertar, avisar, confirmar.
JavaScript admite los siguientes operadores:
Aritmético
Regular: * + - /
, también %
para el resto y **
para la potencia de un número.
El binario más +
concatena cadenas. Y si alguno de los operandos es una cadena, el otro también se convierte en cadena:
alerta ('1' + 2); // '12', cadena alerta (1 + '2'); // '12', cadena
Asignaciones
Hay una asignación simple: a = b
y combinadas como a *= 2
.
Bit a bit
Los operadores bit a bit trabajan con enteros de 32 bits en el nivel de bits más bajo: consulte los documentos cuando sea necesario.
Condicional
El único operador con tres parámetros: cond ? resultA : resultB
. Si cond
es verdadero, devuelve resultA
; de lo contrario, resultB
.
Operadores lógicos
AND lógico &&
y OR ||
realice una evaluación de cortocircuito y luego devuelva el valor donde se detuvo (no es necesario true
/ false
). Lógico ¡NO !
convierte el operando a tipo booleano y devuelve el valor inverso.
Operador coalescente nulo
El ??
El operador proporciona una forma de elegir un valor definido de una lista de variables. El resultado de a ?? b
es a
a menos que sea null/undefined
, entonces b
.
Comparaciones
La verificación de igualdad ==
para valores de diferentes tipos los convierte en un número (excepto null
e undefined
que son iguales entre sí y nada más), por lo que son iguales:
alerta (0 == falso); // verdadero alerta( 0 == '' ); // verdadero
Otras comparaciones también se convierten en números.
El operador de igualdad estricta ===
no realiza la conversión: tipos diferentes siempre significan valores diferentes.
Los valores null
e undefined
son especiales: son iguales ==
entre sí y no son iguales a nada más.
Las comparaciones mayores/menores comparan cadenas carácter por carácter, otros tipos se convierten a un número.
Otros operadores
Hay algunos otros, como un operador de coma.
Más en: Operadores básicos, matemáticas, Comparaciones, Operadores lógicos, Operador coalescente nulo '??'.
Cubrimos 3 tipos de bucles:
// 1 mientras (condición) { ... } // 2 hacer { ... } mientras (condición); // 3 para(sea i = 0; i < 10; i++) { ... }
La variable declarada en el bucle for(let...)
es visible sólo dentro del bucle. Pero también podemos omitir let
y reutilizar una variable existente.
Las directivas break/continue
permiten salir de todo el bucle/iteración actual. Utilice etiquetas para romper bucles anidados.
Detalles en: Bucles: while y for.
Más adelante estudiaremos más tipos de bucles para tratar con objetos.
La construcción "cambiar" puede reemplazar múltiples comprobaciones if
. Utiliza ===
(igualdad estricta) para comparaciones.
Por ejemplo:
let age = Prompt('¿Tu edad?', 18); cambiar (edad) { caso 18: alerta("No funcionará"); // el resultado del mensaje es una cadena, no un número romper; caso "18": alerta("¡Esto funciona!"); romper; por defecto: alert("Cualquier valor distinto de uno de los anteriores"); }
Detalles en: La declaración de "cambio".
Cubrimos tres formas de crear una función en JavaScript:
Declaración de función: la función en el flujo de código principal
función suma(a, b) { sea resultado = a + b; resultado de devolución; }
Expresión de función: la función en el contexto de una expresión.
sea suma = función (a, b) { sea resultado = a + b; resultado de devolución; };
Funciones de flecha:
// expresión en el lado derecho sea suma = (a, b) => a + b; // o sintaxis de varias líneas con {...}, es necesario regresar aquí: sea suma = (a, b) => { //... devolver a + b; } // sin argumentos digamosHola = () => alerta("Hola"); // con un solo argumento sea doble = n => n * 2;
Las funciones pueden tener variables locales: las declaradas dentro de su cuerpo o su lista de parámetros. Estas variables sólo son visibles dentro de la función.
Los parámetros pueden tener valores predeterminados: function sum(a = 1, b = 2) {...}
.
Las funciones siempre devuelven algo. Si no hay una declaración return
, entonces el resultado no está undefined
.
Detalles: ver Funciones, Funciones de flecha, conceptos básicos.
Esa fue una breve lista de características de JavaScript. Hasta ahora hemos estudiado sólo lo básico. Más adelante en el tutorial encontrarás más funciones especiales y avanzadas de JavaScript.