Variables y tipos en JavaScript: primeros pasos

Da tus primeros pasos en JavaScript, el lenguaje que hace interactivas las páginas web. Conecta scripts a una página HTML, almacena valores con let y const, y calcula con números, cadenas de caracteres y booleanos. Aprende cómo JavaScript convierte entre tipos para que resultados como "5" + 2, que da "52", dejen de sorprenderte. Toma decisiones con comparaciones, operadores lógicos, if/else y switch, y encuentra y corrige errores con la consola y el depurador del navegador.

PrincipianteUnidad 1 de 9 del curso Curso de Programación en JavaScript

Lo que aprenderás

  1. Conecta JavaScript a una página HTML, controla cuándo se ejecuta el código y usa la consola del navegador para ejecutar código y ver su salida.
    • Añade JavaScript a una página HTML
      Incorpora scripts con el elemento <script>, integrados en HTML o desde un archivo independiente, y elige dónde colocarlos y cómo cargarlos.
    • Escribe sentencias y usa la consola
      Escribe sentencias y comentarios, ejecuta código en la consola del navegador y muestra resultados con console.log y los cuadros de diálogo integrados del navegador.
  2. Declara variables con nombres claros, elige entre let y const, y predice dónde se puede usar cada variable.
    • Declara variables y asígnales nombres
      Crea variables con let y const, dales nombres válidos y legibles, y actualiza las que cambian.
    • Predice el ámbito y los errores que generan let y const
      Predice en qué parte del código se puede usar una variable, y reconoce y corrige los errores que producen let y const.
  3. Identifica los tipos de datos de JavaScript, calcula correctamente con números y construye y modifica texto con cadenas de caracteres y literales de plantilla.
    • Identifica tipos de datos con typeof
      Nombra los tipos de datos de JavaScript, distingue null de undefined y comprueba el tipo de cualquier valor con typeof.
    • Calcula con números y operadores aritméticos
      Usa los operadores aritméticos y de asignación, aplica la precedencia de operadores, redondea resultados y reconoce los límites de la coma flotante y los valores numéricos especiales.
    • Crea y modifica cadenas de caracteres
      Escribe literales de cadena de caracteres, incluye comillas y caracteres especiales, y usa la longitud, las posiciones de índice y los métodos comunes de las cadenas.
    • Construye texto con literales de plantilla
      Inserta valores y expresiones en texto con cadenas entre acentos graves, escribe texto de varias líneas y da formato a números dentro de mensajes.
  4. Convierte valores de forma explícita con Number(), String() y Boolean(), y predice las conversiones automáticas que JavaScript realiza en operadores y condiciones.
    • Convierte valores de forma explícita
      Convierte texto en números y otros valores en cadenas de caracteres o booleanos, y comprueba si una conversión funcionó.
    • Predice la conversión implícita de tipos
      Predice los resultados de aplicar operadores a tipos mezclados y usa de forma deliberada valores verdaderos y falsos en contexto booleano.
  5. Compara valores correctamente, combina condiciones con operadores lógicos y elige qué código se ejecuta con if, else, el operador condicional y switch.
    • Compara valores
      Usa los operadores de comparación para producir true o false, y predice comparaciones de cadenas de caracteres, tipos mezclados, null, NaN y decimales.
    • Combina condiciones con operadores lógicos
      Une e invierte condiciones con &&, || y !, usa la evaluación en cortocircuito y proporciona valores predeterminados con || y ??.
    • Elige rutas de ejecución con if, else, el operador condicional y switch
      Escribe cadenas de condiciones if, else if y else, elige valores con el operador condicional y maneja casos fijos con switch.
  6. Lee mensajes de error, sigue valores mediante la salida de la consola y pausa el código en el depurador del navegador para ver exactamente qué hace.
    • Lee mensajes de error y sigue los valores con la consola
      Distingue los errores de sintaxis, de ejecución y lógicos, interpreta lo que dice un mensaje de error y usa los valores mostrados para encontrar dónde se produce un resultado incorrecto.
    • Pausa y ejecuta el código paso a paso con el depurador
      Establece puntos de interrupción, ejecuta el código línea por línea e inspecciona los valores de las variables mientras el código está pausado.

Guía de estudio de Variables y tipos en JavaScript

6 capítulos

1

Ejecuta un script y observa su salida

Un navegador puede ejecutar un cálculo en cuanto cargas una página, pero el código necesita un lugar donde estar y una forma de mostrar su resultado. Conecta un script a HTML, elige cuándo se ejecuta y usa la consola para ver sus mensajes. Pequeños experimentos en la consola te ayudarán a aprender el lenguaje antes de modificar los elementos de la página. También conocerás la diferencia entre el valor de una expresión y un mensaje mostrado por un programa.

1.1 Conecta JavaScript a HTML

HTML da estructura a una página, CSS controla su aspecto y JavaScript añade comportamiento. El motor de JavaScript de un navegador ejecuta las instrucciones de un script. A menos que una decisión cambie la ruta, esas instrucciones se ejecutan de arriba abajo.

Coloca código en la página o en un archivo independiente

Un script integrado en HTML contiene JavaScript entre las etiquetas de apertura y cierre:

<script>
  console.log("Hello from the page");
</script>

Un script externo guarda el JavaScript en un archivo .js independiente. Este HTML lo carga:

<script src="js/app.js"></script>

El archivo externo contiene console.log("Hello from the page"); sin etiquetas <script>. Separar los archivos mantiene el HTML legible, permite que varias páginas compartan código y que el navegador guarde el script en caché. Cuando src está presente, se ignora el código dentro del mismo elemento. Usa un solo método por elemento y escribe siempre la etiqueta de cierre </script>: un <script ... /> de cierre automático no cierra el elemento en HTML.

Elige cuándo se ejecuta el script

Un script clásico sin atributo de carga detiene el análisis sintáctico de HTML mientras el navegador lo carga y ejecuta. En <head>, se ejecuta antes de que se haya construido el contenido posterior del cuerpo. Colocarlo justo antes de </body> sitúa el contenido de la página antes que él.

Para un script clásico externo en <head>, defer es una opción predeterminada útil:

<script src="js/app.js" defer></script>

El navegador descarga el script mientras sigue analizando el HTML. Ejecuta el script cuando termina el análisis. Varios scripts diferidos se ejecutan en su orden en el HTML, por lo que un segundo script puede usar valores establecidos por el primero.

Opción de cargaCuándo se ejecuta el scriptOrden de varios scripts
Clásico, sin atributoCuando el análisis llega a él, después de la cargaOrden del HTML
deferDespués del análisis de HTMLOrden del HTML
asyncEn cuanto termina su descargaOrden de finalización de las descargas

Usa async para código independiente que no dependa de que la página esté lista ni de otro script. Añadir defer a un script clásico integrado en HTML no tiene efecto.

Carga un módulo
<script type="module" src="js/main.js"></script>

Un módulo se difiere por defecto y se ejecuta en modo estricto. Puede compartir código mediante import y export. Para cargar módulos en Chrome o Firefox, sirve el proyecto con un servidor de desarrollo local, como la función de servidor en vivo de un editor. Abrir la página en una dirección file:// provoca restricciones en la carga de módulos.

Comprueba la conexión

Supón que index.html está junto a una carpeta js que contiene greet.js. Pon console.log("Page ready"); en ese script y <script src="js/greet.js" defer></script> en el head del HTML. Abre la página y luego su consola: el mensaje es «Page ready».

La ruta relativa comienza en la carpeta del archivo HTML. Con esta organización, src="greet.js" apunta al lugar equivocado. Un mensaje de archivo no encontrado significa que no hay ningún script que ejecutar en esa dirección. Si copiaste las etiquetas HTML en el archivo JavaScript, el motor indica un error de sintaxis en el marcado.

Puntos clave

  • Un script externo usa src; su archivo JavaScript contiene código sin etiquetas HTML.
  • Una ruta relativa de script comienza en la carpeta del archivo HTML.
  • Un script clásico externo diferido se ejecuta después del análisis; los scripts diferidos conservan el orden del HTML.
  • Un script async se ejecuta en cuanto está listo, por lo que los scripts dependientes necesitan otra opción de carga.
  • Los módulos se difieren por defecto y usan el modo estricto.
  • Un elemento script necesita una etiqueta de cierre </script>.

1.2 Escribe instrucciones e inspecciona la consola

La consola del navegador muestra mensajes, errores y los resultados del código que escribes. Abre la consola de la página que estás probando. En Chrome o Edge, usa Ctrl+Shift+J en Windows/Linux o Cmd+Option+J en Mac. En Firefox, usa Ctrl+Shift+K o Cmd+Option+K. F12 abre las herramientas de desarrollo completas en Chrome y Edge.

Sentencias y expresiones

Una expresión produce un valor: 4 + 5 produce 9. Una sentencia da una instrucción, como almacenar ese valor o mostrarlo:

let total = 4 + 5;
console.log("Total:", total);

La primera línea se ejecuta antes que la segunda, que muestra «Total: 9». Un punto y coma termina una sentencia. JavaScript puede insertar muchos puntos y comas omitidos, pero los saltos de línea no siempre funcionan como separadores. Termina las sentencias con punto y coma para dejar clara la estructura deseada.

Escribe 2 + 3 en la consola y pulsa Enter para ver 5. Usa Shift+Enter para una línea nueva sin ejecutar lo escrito. Si introduces let x = 5;, la consola puede mostrar undefined como resultado de esa sentencia. Esto no significa que x contenga undefined: al introducir x a continuación se muestra 5. Del mismo modo, una llamada a console.log() muestra su mensaje y devuelve undefined.

Nombres y comentarios

JavaScript distingue entre mayúsculas y minúsculas. console.log("Hi"); funciona, pero Console.log("Hi"); se refiere a un nombre diferente y genera ReferenceError. console.Log("Hi"); encuentra console, pero falla con TypeError porque no existe un método Log al que se pueda llamar.

Los comentarios están dirigidos a quienes leen el código. El motor los omite:

// Keep the starting value for the next calculation.
let total = 4;
/* A comment can also
   continue on another line. */
console.log(total);

Poner // antes de una sentencia desactiva temporalmente esa línea. Un comentario útil explica una razón que el código por sí solo no aclara.

Mensajes, advertencias y experimentos

console.log("Total:", 9); muestra sus argumentos separados por espacios. console.warn() marca una advertencia; console.error() marca un mensaje de error. Mostrar un mensaje con console.error() no genera por sí mismo una excepción. console.clear() limpia la pantalla.

Las entradas de la consola son experimentos, no ediciones guardadas. Al recargar se vuelven a ejecutar los scripts guardados de la página. Puedes inspeccionar en la consola las variables de nivel superior de los scripts clásicos; las variables de nivel superior de un módulo permanecen dentro de ese módulo.

Cuadros de diálogo sencillos y modo estricto

alert("Saved!"); muestra un mensaje. confirm("Continue?") devuelve true para Aceptar y false para Cancelar. prompt("Quantity?", "1") devuelve la cadena de caracteres introducida, o null para Cancelar. Escribir 12 da "12", no 12. Estos cuadros de diálogo pausan la interacción mientras están abiertos.

Pon "use strict"; al inicio de un script clásico para que ciertos errores se notifiquen. Por ejemplo, totl = 5; sin declaración genera ReferenceError en modo estricto; en un script clásico sin modo estricto puede crear una variable global accidental. Un módulo ya usa el modo estricto. Comprueba la escritura y declara los nombres antes de asignarles valores.

Puntos clave

  • La entrada en la consola evalúa expresiones y console.log() muestra mensajes.
  • El undefined mostrado por una declaración es distinto del valor almacenado en su variable.
  • Los nombres distinguen entre mayúsculas y minúsculas; los comentarios se omiten durante la ejecución.
  • prompt() devuelve texto o null, y confirm() devuelve un booleano.
  • El modo estricto notifica como errores las asignaciones a nombres no declarados.
2

Almacena valores y controla dónde funcionan los nombres

Las variables dan nombres a los valores que el resto del programa puede usar. Elegir const o let indica a quien lee el código si se reasignará un nombre. También importa dónde declares una variable: un valor creado dentro de un bloque puede no estar disponible fuera de él. Sigue un pequeño total acumulado y después recorre bloques anidados para ver a qué variable se refiere cada nombre y por qué los errores de declaración producen mensajes distintos.

2.1 Declara, asigna y actualiza valores

Una variable es un nombre que hace referencia a un valor. Puedes declarar primero el nombre y asignar su valor después, o hacer ambas cosas en una sentencia. El operador de asignación = almacena el valor de la derecha en el nombre de la izquierda.

Elige let o const
let score;
console.log(score); // undefined
score = 10;
score = score + 2;
console.log(score); // 12

let score; declara la variable. Hasta que una asignación le dé otro valor, contiene undefined. La siguiente asignación almacena 10. En score = score + 2;, JavaScript lee la puntuación anterior, suma 2 y después almacena 12. Esta es una instrucción de actualización, por lo que no tiene por qué tener sentido como ecuación matemática. La reasignación usa el nombre existente sin volver a escribir let.

Una declaración const debe incluir su valor inicial:

const BOILING_POINT_C = 100;

La declaración const rate; es un error de sintaxis porque carece de un inicializador. Intentar asignar un valor nuevo a BOILING_POINT_C más adelante genera un TypeError.

Declaración¿Necesita un valor inicial?¿Se puede reasignar el nombre?
letNoSí
constSíNo

Usa const por defecto. Elige let para un total acumulado, un contador o un resultado que asignarán sentencias posteriores. Un valor calculado a partir de otros valores también puede usar const si el programa nunca reasigna ese nombre.

Da al nombre un significado claro

Los nombres pueden contener letras, dígitos, _ y $; no pueden empezar por un dígito. place1 es válido, pero 1stPlace no lo es. Los espacios están prohibidos y un guion se interpreta como una resta, por lo que total-price no nombra una sola variable. Las palabras reservadas como if, return y class no pueden ser nombres de variables.

Usa la notación camelCase para nombres comunes: itemCount, firstName o priceWithTax. Los nombres booleanos como isLoggedIn y hasDiscount describen un valor de sí o no. Incluye unidades cuando eviten confusiones: distanceKm y durationMin. Los valores fijos conocidos antes de ejecutar el programa suelen usar UPPER_SNAKE_CASE, como MAX_LOGIN_ATTEMPTS. Las mayúsculas y minúsculas importan: total y Total son nombres distintos.

Sigue un total acumulado
const TAX_RATE = 0.2;
let total = 0;
total = total + 12.5;
total = total + 7.5;
const totalWithTax = total * (1 + TAX_RATE);
console.log(totalWithTax); // 24

El total comienza en 0, pasa a 12.5 y después a 20. El multiplicador 1 + TAX_RATE es 1.2, por lo que el importe final es 24. Solo total necesita reasignarse. La tasa del impuesto y el importe final calculado usan const.

Si escribes let total = 7.5; una segunda vez en el mismo ámbito, estás intentando declarar una segunda variable, no actualizar la primera. Usa total = 7.5; para sustituir el valor.

Reconoce declaraciones antiguas

El código antiguo suele usar var. Sigue funcionando, pero sus variables pertenecen a una función o un script en vez de a un bloque anidado ordinario. Permite declaraciones repetidas y las lecturas antes de la declaración producen undefined. Los modernos let y const detectan estos errores. Ten presentes sus reglas cuando leas un tutorial antiguo que use var.

Puntos clave

  • = calcula el lado derecho y después almacena su valor bajo el nombre de la izquierda.
  • Usa const por defecto y let cuando el código vaya a reasignar el nombre.
  • Una declaración const requiere un valor inicial.
  • Reasigna una variable existente sin repetir la palabra clave de su declaración.
  • Los nombres descriptivos en camelCase pueden mostrar el significado y las unidades.

2.2 Sigue el ámbito y diagnostica errores de declaración

Un bloque es el código entre llaves, como el cuerpo de un if. El ámbito de una variable es la región donde su nombre se refiere a esa variable. Tanto let como const tienen ámbito de bloque, incluidos los bloques anidados dentro del bloque en que se declaran.

Mantén un resultado donde se necesite
const temperatureC = 31;
let label;
if (temperatureC > 30) {
  label = "hot";
} else {
  label = "mild";
}
console.log(label); // hot

label se declara fuera de las ramas, por lo que la última línea puede leerla. Cada rama asigna un valor a la variable existente. Si en su lugar declaras const label = "hot"; dentro de la primera rama, esa variable no se puede leer después del bloque. Si no hay otra label en el ámbito, la lectura final genera ReferenceError.

Una declaración de nivel superior en un script clásico tiene ámbito global: pueden usarla el código posterior de ese script y los demás scripts clásicos de la página. En un módulo, las variables de nivel superior pertenecen a ese módulo. Mantén una variable en el ámbito más pequeño que la necesite para reducir los conflictos de nombres.

Distingue el sombreado de variables de la reasignación
let x = 1;
{
  let x = 2;
  console.log(x); // 2
}
console.log(x); // 1

La declaración interna crea una variable independiente. Esto es sombreado de variables: dentro del bloque interno, x se refiere a la variable interna. La variable externa sigue siendo 1. En cambio, eliminar el let interno asignaría 2 a la variable externa. Los nombres distintos hacen que esta diferencia sea más fácil de leer.

Lee antes de la inicialización

Un enlace con ámbito de bloque abarca todo su bloque, pero no se puede acceder a él antes de que la declaración lo inicialice. La región anterior a la inicialización es la zona muerta temporal:

console.log(price);
let price = 5;

Esto genera ReferenceError: Cannot access 'price' before initialization. El nombre existe en el ámbito, pero no está listo. En comparación, price is not defined significa que no se encuentra allí ningún enlace con ese nombre. Una declaración interna también sombrea un nombre externo antes de la línea de declaración interna; el valor externo no puede eludir la zona muerta temporal de la variable interna.

Relaciona cada error con una solución
ProblemaTipo de errorSolución
const rate;SyntaxErrorProporciona un valor inicial
Un segundo let total en un mismo ámbitoSyntaxErrorAsigna sin otro let
Leer antes de la inicializaciónReferenceErrorInicializa antes de la lectura
Leer un nombre desconocido o fuera de ámbitoReferenceErrorCorrige el nombre o mueve su declaración
Reasignar un constTypeErrorUsa let si se necesita reasignación

Los errores de sintaxis impiden que ese script comience. Un error en tiempo de ejecución detiene la ejecución actual cuando llega a la sentencia que falla. Chrome permite otra declaración let en una entrada de consola independiente por comodidad; esto no hace que las declaraciones duplicadas sean válidas en un script.

Const fija la referencia

Los valores primitivos como los números y las cadenas de caracteres no pueden cambiar directamente. El contenido de un objeto puede cambiar incluso cuando su nombre usa const:

const settings = { theme: "dark" };
settings.theme = "light"; // allowed

El nombre sigue haciendo referencia al mismo objeto. Asignar settings = {}; intenta sustituir esa referencia y genera TypeError.

Puntos clave

  • Los nombres declarados con let y const tienen el ámbito del bloque que los contiene.
  • Declara un resultado compartido antes de las ramas que le asignan un valor.
  • El sombreado de variables crea una variable independiente; la reasignación cambia la existente.
  • Una lectura en la zona muerta temporal falla aunque el enlace exista en ese ámbito.
  • Las declaraciones duplicadas son errores de sintaxis, mientras que la reasignación de un const es un TypeError en tiempo de ejecución.
  • El contenido de un objeto const puede modificarse sin reasignar el nombre.
3

Calcula con valores y construye texto

El tipo de un valor ayuda a explicar qué hará una operación. Los números permiten hacer cálculos, las cadenas de caracteres contienen texto y los booleanos contienen true o false. Aprende a inspeccionar esos tipos, controlar el orden de las operaciones aritméticas y almacenar los resultados de los métodos de cadenas. Después, los literales de plantilla te permiten combinar valores en mensajes legibles. La salida exacta de la consola mostrará las diferencias de comportamiento entre texto, números, redondeo y formato.

3.1 Identifica el tipo de un valor

Los valores 7, "7" y true tienen tipos diferentes. Pueden aparecer en lugares similares de una página, pero JavaScript aplica reglas distintas a cada uno. Un tipo describe el valor que contiene actualmente una variable, no una restricción permanente de esta.

Empieza por los tres tipos principales

Un número representa valores numéricos enteros y decimales: 42, -7 y 3.75 tienen el mismo tipo. La notación científica también es numérica: 1e3 significa 1000. Una cadena de caracteres contiene texto entre comillas, por lo que "42" es texto aunque sus caracteres sean dígitos. Un booleano es exactamente true o false, sin comillas. Las comparaciones producen booleanos que un programa puede usar para tomar decisiones.

Usa typeof para inspeccionar un valor. Devuelve una cadena de caracteres que indica el tipo:

console.log(typeof 7);         // number
console.log(typeof "7");       // string
console.log(typeof true);      // boolean
console.log(typeof undefined); // undefined

Los comentarios muestran las palabras que se imprimen; los resultados en sí son cadenas de caracteres como "number".

Reconoce valores ausentes
let city;
let middleName = null;
console.log(city);       // undefined
console.log(middleName); // null

undefined suele significar que JavaScript no ha recibido un valor, como ocurre con un let sin inicializar. null suele asignarse deliberadamente para indicar «vacío» o «sin valor». Comprueba si un valor está vacío de forma deliberada con middleName === null.

No uses typeof value === "object" para comprobar si un valor es null. typeof null da "object" debido a un comportamiento histórico del lenguaje, aunque null es un valor primitivo.

Conoce la lista completa de tipos

JavaScript tiene siete tipos primitivos: number, string, boolean, undefined, null, bigint y symbol. El octavo tipo es object, que se usa para valores estructurados. Las funciones son objetos a los que se puede llamar, aunque typeof devuelve "function" para ellas.

Un bigint es un número entero escrito con una n al final, como 9007199254740993n. Permite representar enteros grandes de forma exacta. No mezcles un bigint y un number en operaciones aritméticas: 1n + 2 genera TypeError. Un symbol es un identificador único; typeof Symbol("id") da "symbol". typeof 42n da "bigint".

NaN es otro resultado especial que debes reconocer: a pesar de su nombre, «no es un número», typeof NaN es "number". Es un valor numérico que indica un resultado numérico no válido. Su nombre por sí solo no identifica un tipo distinto.

Sigue una variable que cambia
let data = 42;
console.log(typeof data); // number
data = "forty-two";
console.log(typeof data); // string

Esto es tipado dinámico. La reasignación puede sustituir un número por una cadena de caracteres. Esa flexibilidad hace útil mostrar tanto el valor como su tipo cuando un resultado sorprende:

const input = "7";
console.log(input, typeof input); // 7 string
console.log(input + 1);           // 71
console.log(7 + 1);               // 8

La primera suma une texto; la segunda suma números. Los valores primitivos no pueden cambiar directamente: una operación crea un valor nuevo. Actualizar una variable cambia el valor al que se refiere.

Puntos clave

  • Los valores tienen tipos; una variable let puede contener distintos tipos después de una reasignación.
  • typeof devuelve una cadena de caracteres que indica el tipo de un valor.
  • undefined suele significar que no se asignó un valor; null suele indicar una ausencia deliberada.
  • typeof null es "object", y typeof NaN es "number".

3.2 Controla las operaciones aritméticas y los resultados numéricos

JavaScript usa un único tipo numérico ordinario para valores enteros y decimales. La división conserva la parte fraccionaria: 10 / 4 da 2.5. Tanto el operador que eliges como el orden en que se ejecuta afectan al resultado.

Calcula en el orden deseado
OperadorSignificadoEjemplo
+, -Sumar, restar8 - 3 da 5
*, /Multiplicar, dividir7 / 2 da 3.5
%Resto17 % 5 da 2
**Potencia2 ** 3 da 8

Las potencias se ejecutan antes que la multiplicación, la división y el resto; estas operaciones se ejecutan antes que la suma y la resta. Los operadores del mismo nivel se ejecutan de izquierda a derecha, salvo las potencias, que se agrupan de derecha a izquierda: 2 ** 3 ** 2 es 2 ** 9, o 512. Los paréntesis cambian ese orden: 2 + 3 * 4 da 14, pero (2 + 3) * 4 da 20.

Para calcular la media de 72, 85 y 90, suma todo el grupo antes de dividir:

const average = (72 + 85 + 90) / 3;
console.log(average); // 82.33333333333333

Sin paréntesis, 72 + 85 + 90 / 3 solo divide 90 y da 187.

Separa las unidades enteras y los restos

Math.trunc(7 / 2) elimina la parte fraccionaria y da 3. Para una longitud positiva de 245 cm, Math.floor(245 / 100) da 2 metros, y 245 % 100 da 45 centímetros restantes. Del mismo modo, 3725 segundos dan 1 hora con Math.floor(3725 / 3600), 2 minutos con Math.floor((3725 % 3600) / 60) y 5 segundos con 3725 % 60. Para un entero, n % 2 === 0 comprueba si es par. Un resto tiene el signo del operando izquierdo: -7 % 3 da -1.

Actualiza un número

x += 5 significa x = x + 5. Los operadores -=, *=, /=, %= y **= siguen el mismo patrón. Partiendo de 10, las actualizaciones += 5, *= 2, -= 4 y luego /= 2 dan 15, 30, 26 y luego 13.

++ aumenta en uno y -- disminuye en uno. Con let a = 5; let b = a++;, a pasa a ser 6, pero b recibe 5: el incremento posfijo devuelve el valor anterior. Con let b = ++a;, partiendo de nuevo de a = 5, ambos pasan a ser 6. Una actualización en su propia línea evita depender del resultado de esa expresión.

Redondea y da formato de forma deliberada
HerramientaRegla del resultadoEjemplo
Math.round()Entero más cercano; mitades hacia el infinito positivoMath.round(-2.5) da -2
Math.floor()Hacia abajo, hacia el infinito negativoMath.floor(-2.5) da -3
Math.ceil()Hacia arriba, hacia el infinito positivoMath.ceil(2.1) da 3
Math.trunc()Elimina la fracción hacia ceroMath.trunc(-2.7) da -2

Math.round(13.456 * 100) / 100 da el número 13.46. En cambio, (3.14159).toFixed(2) da la cadena de caracteres "3.14", y (19.999).toFixed(2) da "20.00". Da formato al final: añadir un número a una cadena con formato une texto.

Reconoce los límites numéricos

Los números usan coma flotante binaria de 64 bits. La mayoría de las fracciones decimales son aproximadas, por lo que 0.1 + 0.2 es 0.30000000000000004. Redondea para mostrar el resultado, compara con una tolerancia pequeña adecuada o calcula en unidades enteras como centavos o milímetros.

Algunas operaciones no válidas devuelven un valor en vez de generar un error: 5 / 0 es Infinity, -5 / 0 es -Infinity, y 0 / 0 o "abc" * 2 es NaN. La mayoría de las operaciones aritméticas con NaN siguen dando NaN; NaN ** 0 es una excepción y da 1.

Todos los enteros hasta Number.MAX_SAFE_INTEGER, 9007199254740991, son exactos. Más allá, solo se pueden representar algunos enteros: 9007199254740992 + 1 sigue dando 9007199254740992. Los bigints permiten representar enteros exactos más grandes.

Puntos clave

  • Los paréntesis permiten usar toda una suma como entrada de una división.
  • % da un resto; la división por sí sola conserva la fracción.
  • El incremento posfijo devuelve el valor anterior; el incremento prefijo devuelve el nuevo.
  • Floor, ceil, round y trunc difieren para valores negativos.
  • toFixed() produce texto para mostrar.
  • Las operaciones decimales pueden ser aproximadas, incluso con entradas que parecen sencillas.
  • NaN y los infinitos son valores especiales del tipo number.

3.3 Lee, busca y transforma texto

Una cadena de caracteres almacena texto entre comillas simples, comillas dobles o acentos graves que coinciden. Para texto sin más, las tres formas pueden representar el mismo valor. Las comillas marcan dónde comienza y termina el texto; no forman parte de ese valor.

Comillas, secuencias de escape y unión

Usa el otro tipo de comillas para incluir una comilla: "It's late". Una secuencia de escape usa una barra invertida, como en 'It\'s late'. \n representa un salto de línea, \t un tabulador y \\ una barra invertida. La secuencia de escape \n ocupa una posición en la cadena, aunque se escriba con dos símbolos. "It's".length es 4; "Line 1\nLine 2".length es 13.

El operador + concatena cadenas de caracteres. "Hello" + " " + "world" da "Hello world"; no se inserta ningún espacio a menos que uno de los fragmentos lo contenga. Con let msg = "Hi"; msg += " there";, el valor actualizado es "Hi there".

Las posiciones empiezan en cero
const language = "JavaScript";
console.log(language.length); // 10
console.log(language[0]);     // J
console.log(language[4]);     // S
console.log(language[9]);     // t
console.log(language.at(-1)); // t
console.log(language[10]);    // undefined

El último índice es length - 1. Un argumento negativo para at() cuenta desde el final. length es una propiedad, no un método: language.length() genera TypeError. Más precisamente, las posiciones de las cadenas y length usan unidades de código UTF-16, las unidades que JavaScript usa para almacenar texto. Cada una de estas letras inglesas ordinarias ocupa una unidad; algunos símbolos y emojis ocupan más.

Guarda la cadena nueva

Las cadenas de caracteres son inmutables: su contenido no puede editarse directamente. Asignar word[0] = "b" cuando word es "cat" no crea "bat"; en modo estricto genera un error. Los métodos que transforman texto devuelven una cadena nueva:

let name = "ana";
name.toUpperCase();
console.log(name); // ana
name = name.toUpperCase();
console.log(name); // ANA

Llamar al método no basta para conservar su resultado. Escribir name.toUpperCase sin paréntesis ni siquiera lo llama.

Elige la operación de texto adecuada

toLowerCase() y toUpperCase() cambian entre mayúsculas y minúsculas; trim() elimina espacios en blanco en ambos extremos. El encadenamiento aplica cada método al resultado anterior: " Ana@Example.com ".trim().toLowerCase() da "ana@example.com".

includes(), startsWith() y endsWith() devuelven booleanos. Por ejemplo, "report.pdf".endsWith(".pdf") da true. indexOf() da la primera posición que coincide o -1: "JavaScript".indexOf("S") da 4, pero buscar "s" da -1. Las búsquedas distinguen entre mayúsculas y minúsculas. "JavaScript".includes("script") es false; convierte a minúsculas antes de esa búsqueda para obtener true.

slice(start, end) devuelve texto desde el índice inicial hasta el índice final, sin incluirlo. "JavaScript".slice(0, 4) da "Java"; .slice(4) y .slice(-6) dan "Script".

"a-b-c".replace("-", "+") da "a+b-c"; replaceAll() con los mismos argumentos da "a+b+c". "ab".repeat(3) da "ababab", y "5".padStart(3, "0") da "005". Para const city = "paris";, city[0].toUpperCase() + city.slice(1) produce "Paris" al unir una primera letra mayúscula al resto sin modificar.

Puntos clave

  • Las cadenas de caracteres necesitan comillas que coincidan, y la concatenación no añade espacios por sí sola.
  • El primer índice es cero y el índice de la última letra ordinaria es length - 1.
  • length es una propiedad; los métodos se llaman con paréntesis.
  • Los métodos de transformación producen cadenas de caracteres nuevas, así que guarda sus resultados.
  • Las búsquedas en cadenas de caracteres distinguen entre mayúsculas y minúsculas.
  • slice() excluye su índice final.

3.4 Inserta valores en mensajes legibles

Un literal de plantilla coloca texto entre acentos graves. Dentro de él, ${...} marca un marcador de posición cuya expresión se evaluará e insertará en el texto. Esto es útil cuando un mensaje combina varios valores con signos de puntuación, espacios o cálculos.

Interpreta un marcador de posición como una expresión
const name = "Ana";
const greeting = `Hello, ${name}!`;
console.log(greeting); // Hello, Ana!

El motor lee name, obtiene "Ana" y lo coloca entre el saludo y el signo de exclamación. Los acentos graves y los símbolos del marcador de posición describen la cadena de caracteres; no aparecen en el mensaje resultante.

Con concatenación, la misma idea es "Hello, " + name + "!". Un mensaje más largo como "Hello, " + name + "! You have " + count + " new messages." requiere varios fragmentos entre comillas por separado. Una plantilla mantiene toda la frase unida: `Hello, ${name}! You have ${count} new messages.`. Los espacios siguen teniendo que escribirse donde los quieras.

Calcula y luego da formato dentro del marcador
const name = "Ana";
const tickets = 3;
const price = 4.5;
const receipt = `${name} bought ${tickets} tickets for ${(tickets * price).toFixed(2)} in total.`;
console.log(receipt);

La salida es «Ana bought 3 tickets for 13.50 in total.». Primero, tickets * price produce 13.5. Los paréntesis hacen que todo ese producto sea el objeto receptor de .toFixed(2), que produce "13.50". El marcador de posición inserta ese texto en la frase. Las variables numéricas price y tickets permanecen sin cambios.

Sin formato, un marcador de posición muestra la forma textual habitual del número. `${0.1 + 0.2}` da "0.30000000000000004". Darle formato dentro del marcador, `${(0.1 + 0.2).toFixed(2)}`, da "0.30".

Las expresiones sirven; las sentencias no

Un marcador de posición puede contener un valor, un cálculo, una llamada a un método o una expresión que elige un valor. Con birthYear = 1990, `You turn ${2026 - birthYear} this year.` da «You turn 36 this year.».

El operador condicional puede seleccionar texto en singular o plural:

const count = 1;
console.log(`You have ${count} ${count === 1 ? "item" : "items"}`);
// You have 1 item

La comparación elige una cadena de caracteres para insertar. Una sentencia if no puede sustituir esa expresión dentro de ${...} porque un marcador de posición necesita una expresión que produzca un valor.

Conserva la puntuación exacta

Solo los acentos graves activan los marcadores de posición. Con const n = 5;, "n + 1 = ${n + 1}" es texto normal y deja ${n + 1} sin cambios. La plantilla `n + 1 = ${n + 1}` da «n + 1 = 6». Un acento grave es un carácter distinto de una comilla simple.

Los saltos de línea escritos entre acentos graves se convierten en saltos de línea en la cadena resultante. Los espacios de sangría también pasan a formar parte de ella. Los valores ausentes se insertan como texto: `${undefined}` da "undefined", mientras que `${null}` da "null". Si un mensaje contiene inesperadamente «undefined», inspecciona la variable insertada y dónde se le asignó un valor.

Puntos clave

  • Los acentos graves activan los marcadores de posición ${...}.
  • Un marcador de posición evalúa una expresión e inserta su forma textual.
  • Da formato a un número calculado dentro de su marcador de posición cuando el mensaje necesite decimales fijos.
  • Las cadenas entre comillas dejan los símbolos de los marcadores de posición sin cambios.
  • Los saltos de línea y la sangría de una plantilla pasan a formar parte de la cadena de caracteres.
4

Convierte datos de entrada y predice cambios automáticos

El texto introducido por un usuario a menudo debe convertirse en número para que un cálculo funcione. JavaScript también convierte valores por sí mismo, y su regla de suma puede convertir un total esperado en texto unido. Aprende a elegir una conversión, comprobar si faltan datos o no son válidos y seguir una expresión en el orden de evaluación. Después, esos mismos valores tendrán sentido cuando se usen como condiciones en vez de números.

4.1 Convierte datos de entrada sin perder su significado

La conversión explícita significa que escribes la conversión tú mismo, con una herramienta como Number(), String() o Boolean(). Esto hace visible el tipo deseado en el punto donde un valor entra en el cálculo.

Elige una conversión numérica

Number() lee todo el texto como un número e ignora los espacios en blanco que lo rodean. Number("1.5") da 1.5, y Number(" 12 ") da 12. Number("12px") da NaN porque no toda la cadena de caracteres es numérica. El código usa un punto decimal: Number("1,5") también da NaN.

parseInt() y parseFloat() leen un inicio numérico y se detienen cuando el texto deja de encajar. parseInt("12px", 10) da 12; parseFloat("3.75 kg") da 3.75. El analizador de enteros se detiene en el punto decimal, por lo que parseInt("0.5", 10) da 0. parseInt("abc", 10) da NaN porque no hay un inicio numérico. Pasa una base a parseInt(): parseInt("08", 10) da 8, mientras que parseInt("ff", 16) lee hexadecimal y da 255.

El operador más unario también convierte texto numérico ordinario: +"42" da 42.

Mantén la entrada ausente separada del cero

Un cuadro de entrada devuelve una cadena de caracteres o null. Cancelar devuelve null, y aceptar un cuadro vacío devuelve "". Ambos se convierten en cero con Number(), al igual que el texto que solo contiene espacios en blanco. Comprueba si falta una respuesta antes de convertir:

const input = prompt("Enter a quantity:");
if (input === null || input.trim() === "") {
  console.log("No quantity entered.");
} else {
  const quantity = Number(input);
  if (Number.isNaN(quantity)) {
    console.log("Please type a number.");
  } else {
    console.log(quantity + 1);
  }
}

El operador || omite la llamada a trim() cuando input es null. Escribir «12» lleva al cálculo numérico y muestra 13. Escribir «12px» lleva al mensaje de número no válido. Escribir «0» es una respuesta válida y muestra 1.

Usa Number.isNaN(value) para comprobar si hay un valor NaN real. value === NaN nunca se cumple. La función global más antigua isNaN() convierte primero su argumento: isNaN("hello") es true, pero Number.isNaN("hello") es false porque ese valor sigue siendo una cadena de caracteres.

Convierte a texto o a booleano

String(42) da "42", String(true) da "true" y String(null) da "null". (42).toString() también produce "42", pero llamar a .toString() sobre null o undefined genera TypeError. String() maneja ambos.

Boolean() devuelve false para false, 0, -0, 0n, "", null, undefined y NaN; estos son valores falsos en contexto booleano. Los navegadores también tienen el objeto heredado document.all, que es falso en contexto booleano. Los demás valores son verdaderos en contexto booleano. En particular, "0", "false" y una cadena que contiene un solo espacio son todos verdaderos en contexto booleano. !!value da la misma conversión booleana.

Para dos respuestas de un cuadro de entrada, "12" y "30", a + b produce "1230". Convierte primero ambas entradas: Number(a) + Number(b) da 42.

Puntos clave

  • Number() espera que toda la cadena de caracteres sea numérica; los analizadores pueden leer un prefijo numérico.
  • Comprueba si se pulsó Cancelar o la entrada está vacía antes de la conversión numérica para que no se conviertan en cero.
  • Usa Number.isNaN() para detectar un resultado numérico no válido.
  • Las cadenas de caracteres no vacías como "false" son verdaderas en contexto booleano.
  • String() puede convertir null y undefined sin generar errores.

4.2 Predice la conversión implícita una operación a la vez

La conversión implícita de tipos es la conversión automática de tipos dentro de una operación. Sus reglas dependen del operador. Un cálculo que parece funcionar puede contener un valor de texto que haga fallar un paso posterior.

Sigue la regla de la suma

Para operandos ordinarios de tipo number, string, boolean, null y undefined, + une texto si cualquiera de los operandos es una cadena de caracteres. De lo contrario, realiza una conversión numérica y una suma. "5" + 2 da "52", y 2 + "5" da "25".

Evalúa una cadena de operaciones de izquierda a derecha:

console.log(1 + 2 + "3"); // 33
console.log("3" + 1 + 2); // 312

En la primera expresión, dos números suman 3; al añadir "3" se unen las dos formas textuales en "33". En la segunda, la primera operación ya produce "31", por lo que la operación final añade otro dígito. Los paréntesis pueden cambiar qué operación ocurre primero: "3" + (1 + 2) da "33".

Las demás operaciones aritméticas esperan números

La resta, la multiplicación, la división, el resto y las potencias convierten cadenas de caracteres numéricas en números. "5" - 2 da 3, "5" * "2" da 10 y "10" / "4" da 2.5. Una cadena como "abc" no puede convertirse en un número válido, por lo que "abc" * 2 da NaN. Los bigints tienen reglas aritméticas propias; mezclar uno con un número genera TypeError.

Esta diferencia puede ocultar un error:

const price = "20";
console.log(price * 3); // 60
console.log(price + 5); // 205

La multiplicación convierte el precio, pero no cambia la variable. La suma posterior sigue encontrando una cadena de caracteres. Convierte una vez donde llegan los datos de entrada y sigue trabajando con el resultado numérico.

Sigue pequeñas conversiones automáticas

En operaciones aritméticas numéricas, true se convierte en 1, false en 0 y null en 0. Así, true + true da 2, mientras que null + 1 da 1. undefined se convierte en NaN, por lo que undefined + 1 es NaN. Los operadores más y menos unarios convierten cadenas de caracteres numéricas: +"42" da 42, -"5" da -5 y +"" da 0.

++ siempre solicita una actualización numérica, pero += sigue la regla de la suma:

let count = "5";
count++;
console.log(count, typeof count); // 6 number
let label = "5";
label += 1;
console.log(label, typeof label); // 51 string
Las condiciones aplican una conversión distinta

Una condición if considera un valor verdadero o falso en contexto booleano. "0" es una cadena de caracteres no vacía y cumple la condición; el 0 numérico es falso en contexto booleano y omite el bloque. Si cero es una cantidad válida, una comprobación de su valor en contexto booleano no puede distinguir por sí sola el cero de una respuesta ausente. Para un valor representado por un número o null, quantity !== null comprueba explícitamente si está ausente.

La igualdad también ofrece dos comportamientos: "7" == 7 es true después de la conversión implícita, pero "7" === 7 es false porque la igualdad estricta conserva la distinción de tipos. Usa la igualdad estricta para comparaciones ordinarias.

Cuando un resultado es texto unido o NaN, muestra cada entrada junto a typeof input. Encuentra el primer tipo incorrecto y corrige la conversión ahí. Convertir "205" en número al final daría 205, no la suma deseada 25.

Puntos clave

  • Para valores primitivos ordinarios, un operando de tipo cadena de caracteres hace que + concatene.
  • Sigue las cadenas de operaciones + de izquierda a derecha, respetando los paréntesis.
  • Las demás operaciones aritméticas convierten cadenas de caracteres numéricas sin cambiar las variables originales.
  • ++ convierte a número, mientras que += puede añadir texto.
  • Ser verdadero en contexto booleano es distinto de ser válido: cero puede ser una entrada válida.
5

Compara valores y elige una ruta

Las decisiones convierten valores en acciones: una comparación puede determinar si una medida está dentro de un intervalo, si falta un mensaje o si una opción fija coincide. Combina las comprobaciones con cuidado y después úsalas para elegir un valor o un bloque de código. El orden de las ramas y los tipos que se comparan afectan al resultado. Sigue cada condición con entradas concretas, incluidos cero, una cadena de caracteres vacía y un valor exactamente en un umbral.

5.1 Compara valores sin suposiciones ocultas

Una comparación produce un booleano. 7 > 3 es true, 5 >= 5 incluye la igualdad y es true, y 4 < 2 es false. Almacena un resultado como const isAdult = age >= 18; o úsalo directamente en una condición.

Prefiere la igualdad estricta

=== compara sin convertir tipos. Dos valores primitivos ordinarios deben tener el mismo tipo y valores coincidentes: 7 === 7 es true, mientras que "7" === 7 es false. !== invierte la igualdad estricta, por lo que "7" !== 7 es true.

La igualdad débil, ==, puede convertir los operandos. "7" == 7, 0 == "" y "0" == false son todos true. Su regla especial para valores ausentes hace que null == undefined sea verdadero, pero que null == 0 sea falso. != invierte la igualdad débil. Prefiere === y !==; un uso deliberado de value == null puede comprobar tanto null como undefined.

Distingue el orden textual del orden numérico

Dos cadenas de caracteres se comparan de izquierda a derecha mediante sus valores de código UTF-16. Para palabras inglesas ordinarias con el mismo uso de mayúsculas o minúsculas, "apple" < "banana" es true. Un prefijo coincidente más corto va primero: "apple" < "apples" es true. Entre las letras inglesas sin acento, las mayúsculas van antes que las minúsculas, por lo que "Zebra" < "apple" es true. Convertir ambas cadenas con toLowerCase() elimina esa diferencia de mayúsculas y minúsculas en comparaciones sencillas de letras inglesas.

Las cadenas de dígitos también siguen el orden textual:

console.log("10" < "9"); // true
console.log("10" < 9);   // false

En la primera comparación, el carácter «1» va antes que «9». En la segunda, un operando es numérico, por lo que el texto se convierte en el número 10. Convierte los datos numéricos de entrada de forma deliberada antes de comparar su magnitud. "abc" < 5 y "abc" > 5 dan ambos false porque la conversión numérica produce NaN.

Maneja primero los números ausentes y no válidos

NaN no es igual a sí mismo: tanto NaN === NaN como NaN == NaN son false. Usa Number.isNaN() para reconocerlo.

Las comparaciones relacionales convierten null en cero, por lo que null >= 0 es true, pero null > 0 es false. La igualdad tiene una regla distinta, por lo que null == 0 sigue siendo false. undefined se convierte en NaN en las comparaciones relacionales, por lo que undefined > 0 y undefined < 0 son falsos; undefined == 0 también es falso. Comprueba si falta un valor antes de tratarlo como una medida.

Compara decimales e intervalos

El redondeo binario hace que 0.1 + 0.2 === 0.3 sea falso. Para estos valores pequeños, funciona una comprobación con tolerancia:

const closeEnough = Math.abs((0.1 + 0.2) - 0.3) < 0.000001;
console.log(closeEnough); // true

Math.abs() elimina el signo de la diferencia. Elige una tolerancia adecuada para la magnitud y la precisión de los valores, o calcula en unidades enteras como milímetros.

No encadenes comprobaciones de intervalos como en matemáticas. Con x = 50, 0 < x < 10 primero produce true y luego compara ese booleano como 1 < 10, lo que da true. Del mismo modo, 3 > 2 > 1 se convierte en true > 1, o 1 > 1, que es falso. Escribe ambas comparaciones completas: x > 0 && x < 10.

Puntos clave

  • La igualdad estricta comprueba los tipos sin conversión implícita.
  • Dos cadenas de dígitos se comparan como texto; conviértelas para comparar su magnitud numérica.
  • Comprueba los valores ausentes y NaN antes de hacer comparaciones numéricas.
  • Los resultados decimales pueden necesitar una tolerancia en vez de igualdad exacta.
  • Une dos comparaciones de un intervalo con &&; no las encadenes.

5.2 Combina comprobaciones y elige valores predeterminados

Los operadores lógicos permiten que una condición exprese varios requisitos. Con operandos booleanos, && significa AND, || significa OR y ! significa NOT. Su orden de evaluación también permite proteger una operación que fallaría ante un valor ausente.

Expresa cada requisito
const temperatureC = 25;
const inRange = temperatureC >= 18 && temperatureC <= 30;
const outside = temperatureC < 18 || temperatureC > 30;

inRange es verdadero porque se cumplen ambos límites. outside es falso porque no se cumple ninguna de las comprobaciones de estar fuera. OR incluye el caso en que ambos lados son verdaderos; no significa «uno, pero nunca ambos».

Escribe cada comparación completa. color === "red" || "green" no comprueba si coincide con cualquiera de los dos colores. Con color = "blue", la primera comparación es falsa, pero la cadena de caracteres no vacía "green" es verdadera en contexto booleano. La comprobación deseada es color === "red" || color === "green".

Agrupa la condición que deseas expresar

NOT se aplica antes que AND, y AND antes que OR. Por tanto, true || false && false es verdadero, pero (true || false) && false es falso.

Supón que el acceso requiere iniciar sesión y tener el rol de administrador o de propietario. Escribe loggedIn && (isAdmin || isOwner). Sin paréntesis, loggedIn && isAdmin || isOwner permite que isOwner haga verdadera toda la expresión incluso con loggedIn = false. Los paréntesis mantienen el requisito de inicio de sesión vinculado a ambos roles.

Invertir una condición compuesta también cambia el conector. !(a && b) tiene el mismo valor de verdad que !a || !b; !(a || b) equivale a !a && !b. Para una temperatura fuera del intervalo que incluye sus extremos, invertir las dos comprobaciones de estar dentro cambia >= por <, <= por > y AND por OR.

Detente cuando se conozca el resultado

AND se detiene en el primer operando falso en contexto booleano; OR se detiene en el primero verdadero en contexto booleano. Esto es evaluación en cortocircuito. El operando omitido no se evalúa:

const input = null;
const hasText = input !== null && input.trim() !== "";
console.log(hasText); // false

La primera comprobación es falsa, por lo que nunca se llama a trim() sobre null. Invertir esas dos comprobaciones intentaría primero la operación insegura.

Estos operadores devuelven un operando, no necesariamente un booleano. "" || "Guest" devuelve "Guest"; "Sam" || "Guest" devuelve "Sam". "Ana" && "ok" devuelve "ok", y null && "x" devuelve null. Un if que los rodee comprueba después si el valor devuelto es verdadero o falso en contexto booleano.

Conserva los valores falsos en contexto booleano que tienen significado
ExpresiónCuándo el valor de respaldo sustituye la entrada
`value
value ?? fallbackSolo para null o undefined

Con quantity = 0, quantity || 1 da 1, pero quantity ?? 1 conserva 0. Con nickname = "", nickname || "Anonymous" da el valor de respaldo, mientras que nickname ?? "Anonymous" conserva la cadena de caracteres vacía. Usa ?? cuando esos valores tengan significado.

Usa paréntesis al mezclar ?? con AND u OR: a || b ?? c es un error de sintaxis, mientras que (a || b) ?? c tiene una agrupación explícita. NOT primero convierte a booleano y después lo invierte: !0 es verdadero y !"0" es falso. La doble negación, !!value, da un booleano.

Puntos clave

  • AND requiere que se cumplan ambas comprobaciones; OR requiere al menos una.
  • Los paréntesis mantienen los requisitos compartidos vinculados a cada caso permitido.
  • La evaluación en cortocircuito omite un operando cuando el resultado ya está decidido.
  • && y || devuelven valores de operandos que pueden no ser booleanos.
  • ?? sustituye solo null y undefined, y conserva el cero y el texto vacío.
  • Mezclar ?? directamente con AND u OR requiere paréntesis.

5.3 Elige ramas, valores y casos fijos

Una sentencia if ejecuta un bloque cuando su condición es verdadera en contexto booleano. Un else se ejecuta cuando esa condición es falsa en contexto booleano. Usa llaves para mostrar exactamente qué sentencias pertenecen a cada rama.

Ordena una cadena de decisiones

Una cadena de condiciones else if comprueba de arriba abajo. Se ejecuta la primera condición que se cumple y se omiten todas las ramas posteriores:

const score = 85;
let grade;
if (score >= 90) {
  grade = "A";
} else if (score >= 80) {
  grade = "B";
} else if (score >= 70) {
  grade = "C";
} else {
  grade = "F";
}

La primera comparación no se cumple; la segunda sí, por lo que grade pasa a ser "B". Comprobar primero score >= 70 captaría incluso una puntuación de 95 y asignaría "C". Para umbrales mínimos que se solapan, pon primero el más alto. La variable compartida grade se declara fuera de las ramas para que el código posterior pueda leerla.

Una condición compuesta puede mantener legible una decisión breve. El envío es gratuito para un total de pedido de al menos 50 o para un miembro; de lo contrario cuesta 4,95:

const orderTotal = 45;
const isMember = false;
let shipping;
if (orderTotal >= 50 || isMember) {
  shipping = 0;
} else {
  shipping = 4.95;
}
console.log(`To pay: ${orderTotal + shipping}`);
// To pay: 49.95

Dos condiciones anidadas sin ramas else a menudo se pueden unir con AND: if (isLoggedIn) { if (isAdmin) { ... } } ejecuta su código más interno bajo las mismas condiciones booleanas que if (isLoggedIn && isAdmin) { ... }.

Evita la puntuación que cambia la ruta

Sin llaves, solo la siguiente sentencia pertenece a un if; la sangría no puede añadirle otra sentencia. Un punto y coma inmediatamente después de la condición crea una sentencia vacía: if (x > 5); { ... } hace que el bloque siguiente se ejecute independientemente de la condición.

if (x = 5) asigna 5 y después comprueba si es verdadero en contexto booleano. Cambia x y cumple la condición porque 5 es verdadero en contexto booleano. Para comparar, usa if (x === 5).

Elige un valor con una expresión condicional

El operador condicional, o ternario, devuelve uno de dos valores:

const age = 17;
const status = age >= 18 ? "adult" : "minor";
console.log(status); // minor

La forma es condition ? valueIfTrue : valueIfFalse. Úsalo para una elección breve dentro de una asignación o un literal de plantilla. Usa if/else para ramas de sentencias. Las expresiones condicionales muy anidadas hacen que las opciones sean difíciles de seguir.

Compara opciones fijas con switch
const day = "Sat";
let kind;
switch (day) {
  case "Sat":
  case "Sun":
    kind = "weekend";
    break;
  default:
    kind = "weekday";
}

switch compara el valor de forma estricta con sus etiquetas de caso. Ambas etiquetas del fin de semana llegan a la misma asignación. break sale del switch; default maneja un valor que no coincide con ningún caso. switch ("2") no coincide con case 2: porque los tipos son distintos.

Después de una coincidencia, la ejecución continúa por los casos posteriores hasta un break o el final. Esta continuación entre casos (fall-through) puede ser deliberada, como con etiquetas consecutivas, o accidental. Si el caso 2 añade una palabra y carece de un break antes de que el caso 3 añada otra, se ejecutan ambas adiciones. Una etiqueta de caso es un punto de entrada, no una condición nueva que se comprueba después de cada sentencia.

Puntos clave

  • Una cadena de condiciones else if solo ejecuta la primera rama cuya condición se cumple.
  • Declara un resultado fuera de las ramas cuando las sentencias posteriores lo necesiten.
  • Usa llaves y no pongas un punto y coma directamente después de una condición if.
  • = asigna un valor; === compara valores.
  • El operador condicional elige un valor.
  • switch compara de forma estricta y necesita break para detener la continuación entre casos.
6

Encuentra el primer paso incorrecto

Un mensaje de error puede señalar directamente un fallo, pero un programa también puede ejecutarse correctamente y producir un resultado equivocado. Lee el tipo, el mensaje y la ubicación en la consola, y después sigue los valores que importan. Cuando los registros dejen demasiado a la suposición, pausa la ejecución y avanza paso a paso. Una rutina de depuración pequeña y repetible te ayuda a comprobar una causa a la vez y verificar la corrección en el programa guardado.

6.1 Lee errores y sigue resultados incorrectos

Un programa puede fallar antes de empezar, detenerse durante la ejecución o terminar con un resultado incorrecto. Identifica qué ocurrió antes de cambiar el código. La consola aporta información sobre los errores, mientras que los registros con etiquetas revelan valores del código que se ejecuta.

Distingue tres tipos de problemas
TipoQué ocurreEjemplo
Error de sintaxisNo se puede analizar el script; no se ejecuta ninguna parte de ese scriptUn paréntesis sin cerrar
Error en tiempo de ejecuciónLa ejecución llega a una sentencia que genera un error; las sentencias anteriores ya se han ejecutadoLeer un nombre desconocido
Error lógicoEl código se ejecuta, pero el resultado es incorrectoDividir solo la última parte de una suma

Un error de sintaxis en un script no deshace otro script que ya se ejecutó. Una excepción no manejada en tiempo de ejecución detiene la ejecución actual en la sentencia que falla.

Lee el mensaje completo

Una entrada de la consola como Uncaught ReferenceError: totl is not defined indica el tipo de error y el nombre que falla. «Uncaught» significa que la excepción no se manejó. Una ubicación como app.js:2 señala el archivo y la línea; al hacer clic se abre ese código.

let total = 0;
total = totl + 5;
console.log(total);

La línea 1 se ejecuta. En la línea 2, JavaScript no puede leer totl, por lo que nunca completa esa asignación ni llega al registro final. Corregir el error de escritura por total hace que el script muestre 5.

Los mensajes de sintaxis habituales mencionan un ) ausente, un elemento inesperado o un elemento no válido. En console.log("hi";, falta el paréntesis de cierre. En if (x > 3 {, a la condición le falta el paréntesis de cierre. La línea indicada es donde el motor detectó el problema; inspecciona también justo encima por si hay una comilla o un delimitador sin cerrar.

Usa el tipo para acotar la causa

Un ReferenceError señala un nombre al que no se puede acceder: un error de escritura, un problema de ámbito o una lectura antes de la inicialización. Un TypeError significa que la operación no corresponde al valor, como "abc".length(), null.trim() o una reasignación a un const. Un RangeError puede deberse a un argumento no admitido, como (1.5).toFixed(101).

La formulación de los errores puede variar según el navegador. El tipo y el valor implicado son más útiles que memorizar toda la frase. Corrige el primer error relevante y vuelve a ejecutar, porque los mensajes posteriores pueden deberse a la misma causa.

Sigue un error lógico

Para una media incorrecta, muestra la suma y el resultado por separado:

const sum = 72 + 85 + 90;
const average = 72 + 85 + 90 / 3;
console.log("sum:", sum);         // 247
console.log("average:", average); // 187

La suma correcta acota el fallo al paso de división. Cambia el cálculo a sum / 3, que da 82.33333333333333. Cuando una suma une dígitos inesperadamente, muestra también los tipos: console.log("price:", price, typeof price);. Encuentra el primer valor que difiera de lo que esperas.

Usa console.warn() o console.error() para destacar tus propios mensajes de diagnóstico. Comprueba los filtros de nivel de la consola si parece faltar un registro. Un 404 significa que no se encontró un recurso, así que comprueba la ruta del script; otros fallos de carga requieren leer el mensaje completo. La falta de un registro de inicio también puede deberse a un filtro o a un error de sintaxis.

Reproduce el problema, lee el primer error, comprueba una causa probable con un pequeño cambio o registro, y después vuelve a ejecutar y comprueba el resultado esperado. Elimina los registros temporales cuando se haya corregido el error.

Puntos clave

  • Los errores de sintaxis, de ejecución y lógicos requieren distintos tipos de información.
  • Lee el tipo de error, el mensaje completo y la ubicación.
  • La línea indicada para un error de sintaxis puede estar después del delimitador que falta.
  • Muestra valores y tipos para encontrar el primer paso incorrecto.
  • Comprueba los fallos de carga y los filtros de la consola cuando falte la salida esperada.

6.2 Pausa la ejecución e inspecciona los valores actuales

Un depurador te permite pausar un script en ejecución e inspeccionar los valores en ese momento exacto. Usa el panel Sources en Chrome o Edge, o el panel Debugger en Firefox. Esto es especialmente útil cuando un resultado incorrecto depende de varias operaciones anteriores.

Pausa antes de que se ejecute la línea

Abre el script en Sources y haz clic en un número de línea para establecer un punto de interrupción. La ejecución se pausa antes de que se ejecute esa línea. Si el código se ejecuta durante la carga de la página, recárgala después de establecer el punto de interrupción. El mero hecho de establecerlo no vuelve a ejecutar el código que ya terminó.

También puedes escribir debugger; en el script. Con un depurador activo, pausa la ejecución; sin él, no tiene efecto. Elimina esta sentencia antes de publicar el código.

Elige la siguiente acción
Control de ChromeAtajoEfecto
ReanudarF8Continúa hasta el siguiente punto de interrupción o el final
Paso a paso por procedimientosF10Ejecuta la sentencia actual sin entrar en una función llamada
Entrar en la funciónF11Entra en una función llamada cuando está disponible para el depurador
Salir de la funciónShift+F11Termina la función actual y vuelve a pausar donde se llamó

Algunas llamadas integradas no tienen código fuente JavaScript en el que puedas entrar paso a paso. El paso a paso por procedimientos es útil cuando quieres el resultado de la llamada sin seguir su funcionamiento interno.

Durante la pausa, pasa el cursor sobre un nombre para inspeccionarlo, lee los valores locales en Scope o añade una expresión a Watch. Las entradas de Watch como typeof price y total > 100 se vuelven a evaluar a medida que avanzas. La consola también puede evaluar expresiones usando el ámbito pausado.

Inspecciona un total engañoso

El envío gratuito debería comenzar en 50, pero este código lo concede para un subtotal de 45 más 4 de envío:

const subtotal = "45";
const shipping = 4;
const total = subtotal + shipping;
if (total >= 50) {
  console.log("Free shipping");
}

Establece un punto de interrupción en la línea del if y recarga la página. La asignación ya se ha ejecutado. Scope muestra subtotal como la cadena de caracteres "45" y total como "454". Una entrada typeof total en Watch indica "string". La comparación convierte "454" en número, por lo que total >= 50 se cumple.

El fallo está en la suma, antes de la comparación. Cambia el cálculo guardado a const total = Number(subtotal) + shipping;. Vuelve a cargar la página. El total ahora es el número 49 y la condición es falsa. Si pausas en la asignación, esta aún no se ha ejecutado: avanza sobre ella antes de inspeccionar el total inicializado.

Pausa solo donde sea útil

Un punto de interrupción condicional pausa solo cuando su expresión es verdadera, como total > 100. Haz clic derecho en el número de línea para añadir uno. Un punto de registro muestra un mensaje cada vez que se ejecuta su línea, sin pausar ni editar el script. Los puntos de interrupción por excepción pausan donde se genera una excepción, para que puedas inspeccionar los valores en el momento del fallo.

Recorrer paso a paso una cadena de condiciones else if revela a qué rama se llega y qué condición anterior impide las comprobaciones posteriores. Usa registros para unos pocos valores conocidos y el depurador cuando importen el orden o varios valores actuales. Haz la corrección final en el código guardado del proyecto: un cambio experimental en el navegador no es una edición permanente del proyecto. Vuelve a ejecutar el caso que fallaba y comprueba el resultado corregido.

Puntos clave

  • Un punto de interrupción de línea pausa antes de ejecutar su sentencia; recarga el código que se ejecuta al cargar la página.
  • El paso a paso por procedimientos ejecuta una sentencia; entrar y salir de funciones permite seguir sus llamadas.
  • Scope y Watch muestran valores y expresiones actuales durante la pausa.
  • Inspecciona un tipo incorrecto antes de la operación que lo usa.
  • Un punto de interrupción condicional filtra las pausas; un punto de registro muestra mensajes sin pausar.
  • Guarda la corrección en el proyecto y vuelve a ejecutar el caso que fallaba.

Ejemplos de Variables y tipos en JavaScript

6 Lecciones Interactivas

1

Carga un script y lee sus primeros mensajes

13 pasos
Conecta un pequeño script a HTML, elige su comportamiento de carga e interpreta los resultados de la consola y los cuadros de diálogo.
  1. 1
    IntroducciónDa al código un lugar donde ejecutarse

    Un navegador lee HTML para construir la página y ejecuta JavaScript para llevar a cabo instrucciones. Para ver un primer resultado, necesitas un script conectado y una consola abierta. Seguiremos una pequeña página desde la organización de sus archivos hasta el mensaje que muestra y después usaremos entradas de consola para distinguir los valores almacenados de los resultados de las sentencias.

  2. 2
    ExplicaciónElige código integrado en HTML o externo

    Un script integrado en HTML contiene código entre sus etiquetas. Un script externo usa src para cargar un archivo JavaScript independiente:

    <script src="js/greet.js"></script>
    

    El archivo externo contiene JavaScript sin etiquetas HTML. El código dentro de este mismo elemento se ignoraría porque src está presente. Conserva la etiqueta de cierre </script>; HTML no trata este elemento como de cierre automático.

  3. 3
    EjemploAjusta la ruta a las carpetas

    Coloca index.html junto a una carpeta llamada js, con greet.js dentro de esa carpeta. El src="js/greet.js" de la página parte de la carpeta HTML y entra en js.

    En el archivo JavaScript, escribe:

    console.log("Page ready");
    

    Guarda ambos archivos. Una ruta greet.js buscaría junto al archivo HTML en vez de dentro de su subcarpeta, por lo que no encontraría este script.

  4. 4
    ExplicaciónEjecuta después de analizar la página

    Añade defer al script clásico externo en el head:

    <script src="js/greet.js" defer></script>
    

    La descarga ocurre al mismo tiempo que el análisis de HTML. La ejecución espera hasta que termina el análisis. Varios scripts clásicos diferidos conservan su orden en el HTML, lo que importa cuando uno usa un valor establecido por otro. Añadir defer a código clásico integrado en HTML no retrasa su ejecución.

  5. 5
    DesafíoMantén en orden los scripts dependientes

    Una página tiene setup.js seguido de display.js en su head. El segundo script usa un valor del primero y ambos necesitan el contenido analizado de la página. ¿Cumpliría async en ambos estos requisitos? ¿Qué opción de carga lo haría?

    ---reveal---

    No. Los scripts async se ejecutan cuando termina cada descarga, por lo que no se garantizan su orden ni que la página esté lista. Usa defer en ambos scripts clásicos externos y mantén setup primero en el HTML.

  6. 6
    ConexiónReconoce un script de módulo

    Un script cargado con type="module" se difiere por defecto, usa el modo estricto y mantiene sus nombres de nivel superior dentro del módulo. Los módulos pueden compartir código mediante import y export. Carga las páginas con módulos mediante un servidor de desarrollo local en Chrome o Firefox; abrir directamente una dirección de archivo encuentra restricciones de carga de módulos. Estas reglas de carga son distintas de las de un script clásico ordinario.

  7. 7
    ConsejoAbre la consola de esta página

    En Chrome o Edge, abre la consola con Ctrl+Shift+J en Windows/Linux o Cmd+Option+J en Mac. Firefox usa Ctrl+Shift+K o Cmd+Option+K. Recarga la página guardada y busca «Page ready». Un error de archivo no encontrado te lleva de vuelta a la ruta; un error de sintaxis señala código que el motor no pudo analizar. Las entradas de la consola pertenecen a la página actual.

  8. 8
    EjemploDistingue la salida de la evaluación

    Introduce estas líneas como entradas de consola separadas:

    let total = 9;
    total;
    console.log("Total:", total);
    

    La declaración puede mostrar undefined como resultado. Leer total sigue dando 9. La última llamada muestra «Total: 9» y devuelve undefined. El resultado mostrado de una sentencia no es necesariamente el valor almacenado en la variable ni el mensaje mostrado por esa llamada.

  9. 9
    DesafíoInterpreta una declaración en la consola

    Introduces let count = 6; y ves undefined. Después introduces count + 2. ¿Qué resultado debes esperar y significaba la primera salida que la declaración había fallado?

    ---reveal---

    El resultado es 8. La declaración almacenó 6 correctamente; su propio resultado fue undefined. La expresión posterior lee ese número almacenado y suma 2. No se produce ninguna reasignación, por lo que count sigue conteniendo 6.

  10. 10
    ExplicaciónUsa nombres exactos y notas claras

    JavaScript distingue entre mayúsculas y minúsculas. console.log() funciona; Console.log() busca un nombre distinto. Usa // para un comentario de una línea o /* ... */ para uno más largo. El motor omite el texto de los comentarios.

    Inicia un script clásico con "use strict"; para detectar asignaciones a nombres no declarados. Un error de escritura como totl = 5; indica entonces un error en vez de crear accidentalmente un nombre global.

  11. 11
    EjemploInspecciona el tipo de entrada de un cuadro de diálogo

    Ejecuta este código de práctica con un cuadro de diálogo:

    const input = prompt("Quantity?", "1");
    console.log(input, typeof input);
    

    Aceptar un 6 escrito da 6 string: los dígitos se devolvieron como texto. Cancelar devuelve null, mientras que aceptar un cuadro vacío devuelve una cadena de caracteres vacía. confirm() devuelve un booleano y alert() muestra un mensaje. Un cuadro de diálogo espera la respuesta antes de que se ejecute la siguiente sentencia.

  12. 12
    DesafíoRelaciona la carga con la salida

    Un script clásico externo cargado con defer contiene console.log("Started"); const answer = prompt("Code?"); console.log(typeof answer);. El usuario escribe 42 y acepta. ¿Qué aparece, en qué orden, y conservaría la recarga automáticamente esa respuesta?

    ---reveal---

    Los mensajes son «Started» y «string». Prompt devuelve texto, incluso para dígitos. Al recargar se vuelve a ejecutar el script guardado y se abre de nuevo el cuadro de entrada; la variable de la ejecución anterior no es una edición guardada del proyecto.

  13. 13
    RepasoComprueba un primer script

    Para un primer script, comprueba la ruta relativa, elige el comportamiento de carga, guarda y recarga. Lee el mensaje de la consola por separado del resultado de evaluación de la propia consola. Cuando un cuadro de entrada proporcione datos, inspecciona su valor y tipo antes de construir un cálculo con ellos. Un nuevo experimento en la consola cambia la página en ejecución, así que guarda las ediciones permanentes en el proyecto.

2

Sigue declaraciones, actualizaciones y ámbitos

11 pasos
Sigue un total acumulado y después predice cómo afectan a la ejecución los bloques internos y los errores de declaración.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónSigue un valor a través de un programa
  2. 2
    ExplicaciónElige declaraciones según la reasignación
  3. 3
    EjemploLee el valor anterior antes de almacenar el nuevo
  4. 4
    EjemploCalcula un valor final una sola vez
  5. 5
    DesafíoElige la declaración adecuada
  6. 6
    ExplicaciónColoca un resultado compartido fuera de sus ramas
  7. 7
    DesafíoDetecta el sombreado de variables
  8. 8
    Idea claveUn enlace puede existir antes de estar listo
  9. 9
    ConsejoUsa el tipo de error como pista
  10. 10
    DesafíoCorrige el resultado sin ocultarlo
  11. 11
    RepasoExamina el enlace y después el valor
3

Calcula un total y construye su mensaje

18 pasos
Inspecciona tipos, calcula resultados y dales formato, transforma cadenas de caracteres y construye un mensaje de plantilla.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónLleva el significado de los valores al texto
  2. 2
    ExplicaciónInspecciona un valor antes de usarlo
  3. 3
    DesafíoPredice un cambio de tipo
  4. 4
    Idea claveInterpreta con cuidado una etiqueta de tipo
  5. 5
    EjemploCalcula antes de dar formato
  6. 6
    ExplicaciónHaz que toda la suma sea el numerador
  7. 7
    DesafíoEncuentra los metros completos
  8. 8
    ConsejoElige el redondeo según la dirección
  9. 9
    ConexiónSepara la precisión de la presentación
  10. 10
    ExplicaciónConserva el resultado de una transformación
  11. 11
    EjemploInterpreta índices y un fragmento
  12. 12
    DesafíoLimpia primero y luego comprueba
  13. 13
    Idea claveIdentifica si un método devuelve texto
  14. 14
    EjemploInserta el total calculado
  15. 15
    DesafíoElige las comillas necesarias
  16. 16
    ExplicaciónDeja que la expresión elija una palabra
  17. 17
    DesafíoCombina la limpieza y la presentación numérica
  18. 18
    RepasoInspecciona un mensaje de dentro hacia fuera
4

Acepta una cantidad sin ocultar la ausencia de entrada

12 pasos
Sigue una respuesta de prompt a través de las comprobaciones de ausencia, la conversión, la validación y las operaciones aritméticas.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónDistingue la ausencia de un valor numérico
  2. 2
    EjemploInspecciona la respuesta original
  3. 3
    ExplicaciónComprueba la ausencia antes de convertir
  4. 4
    EjemploRechaza una conversión fallida
  5. 5
    DesafíoElige un analizador según el significado
  6. 6
    Idea claveConvierte a booleano sin interpretar la palabra
  7. 7
    EjemploDetecta un cálculo que oculta texto
  8. 8
    ExplicaciónEvalúa una cadena de operaciones desde la izquierda
  9. 9
    DesafíoSigue dos actualizaciones distintas
  10. 10
    ConsejoCorrige la entrada antes del total
  11. 11
    DesafíoConserva el cero durante todo el proceso
  12. 12
    RepasoValida en el orden en que se dispone de la información
5

Construye una decisión que cumpla sus reglas

15 pasos
Compara valores, combina requisitos, conserva el cero frente a valores predeterminados y sigue ramas y casos de switch.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónConvierte una regla en una decisión predecible
  2. 2
    ExplicaciónMantén visibles los tipos en la igualdad
  3. 3
    EjemploCompara números almacenados como texto
  4. 4
    DesafíoIdentifica los operandos reales de una comparación
  5. 5
    ConsejoComprueba la ausencia y la precisión numérica
  6. 6
    ExplicaciónHaz explícito cada requisito
  7. 7
    EjemploAgrupa un requisito compartido
  8. 8
    DesafíoConserva un valor vacío cuando sea válido
  9. 9
    Idea claveLa evaluación en cortocircuito controla qué se evalúa
  10. 10
    EjemploSigue la primera rama cuya condición se cumple
  11. 11
    DesafíoElige un valor o varias sentencias
  12. 12
    ExplicaciónInterpreta switch como un punto de entrada
  13. 13
    DesafíoPredice el efecto del break ausente
  14. 14
    DesafíoCombina la conversión con el orden de las ramas
  15. 15
    RepasoComprueba la regla en sus límites
6

Localiza y corrige un total engañoso

12 pasos
Usa la información de la consola y un estado pausado del depurador para encontrar un error de tipo dentro de un cálculo que, por lo demás, se ejecuta.

Guarda esta unidad para seguir cada Lección Interactiva paso a paso.

  1. 1
    IntroducciónEncuentra dónde se vuelve incorrecto el resultado por primera vez
  2. 2
    ExplicaciónClasifica el fallo antes de cambiar el código
  3. 3
    EjemploLee el nombre que falla y su ubicación
  4. 4
    DesafíoDistingue el análisis sintáctico de la ejecución
  5. 5
    ConsejoMuestra el primer valor inesperado
  6. 6
    EjemploReproduce la decisión incorrecta
  7. 7
    ExplicaciónPausa antes de la comparación
  8. 8
    Idea claveLa conversión posterior no puede corregir la suma
  9. 9
    DesafíoInspecciona antes y después de una asignación
  10. 10
    ConsejoElige la pausa que responde a la pregunta
  11. 11
    DesafíoVerifica una corrección de tipo mediante una decisión
  12. 12
    RepasoVuelve a probar la corrección guardada

Ejercicios de Variables y tipos en JavaScript

60 Preguntas de Práctica en 6 sets

Set 1: Ejecuta código y sigue los valores almacenados10 Preguntas de Práctica

Pregunta 1 de 10

Un script muestra un mensaje de inicio y después se detiene con ReferenceError: lenght is not defined. ¿Qué debes inspeccionar primero?
  1. La ruta HTML del script cargado.
  2. La escritura y el ámbito de lenght.
  3. La precisión decimal de sus valores.
  4. Los ajustes de color de las advertencias de la consola.
Mostrar respuestaOcultar respuesta
Respuesta: B
El mensaje de inicio muestra que el script comenzó a ejecutarse y el error identifica un nombre que no se puede leer. Inspecciona si lenght está mal escrito o no está disponible en el ámbito actual. Una ruta incorrecta impediría que se ejecutara la sentencia de inicio de ese archivo, lo que no coincide con lo observado.

Pregunta 2 de 10

Una página HTML está junto a una carpeta scripts que contiene start.js. ¿Qué elemento carga ese archivo después de que termine el análisis de HTML?
  1. <script src="start.js" defer></script>
  2. <script src="scripts/start.js" defer></script>
  3. <script src="scripts/start.js" async></script>
  4. <script defer>scripts/start.js</script>
Mostrar respuestaOcultar respuesta
Respuesta: B
La ruta relativa debe incluir la carpeta scripts, y defer retrasa el script clásico externo hasta que termina el análisis. async también descarga durante el análisis, pero puede ejecutarse antes de que este termine. Escribir la ruta como texto integrado no carga un archivo.

Pregunta 3 de 10

¿Qué mensaje muestra este código?

// console.log("Old");
console.log("Items:", 6 + 2);
  1. «Old Items: 8»
  2. «Items: 62»
  3. «Items: 6 + 2»
  4. «Items: 8»
Mostrar respuestaOcultar respuesta
Respuesta: D
La línea comentada se omite y la expresión numérica se evalúa antes de mostrar su resultado. console.log() separa la etiqueta y el resultado con un espacio, produciendo «Items: 8». Unir los dígitos en «62» requeriría concatenar cadenas de caracteres, pero aquí ambos operandos son números.

Pregunta 4 de 10

Un programa almacena const rate = 0.15; y después ejecuta rate = 0.2;. ¿Qué ocurre en la asignación?
  1. Se genera un TypeError.
  2. La tasa se establece en 0,2.
  3. Se genera un SyntaxError.
  4. La tasa queda undefined.
Mostrar respuestaOcultar respuesta
Respuesta: A
La declaración proporciona un valor inicial válido, por lo que el script puede comenzar. El intento posterior de reasignar el enlace const genera un TypeError cuando la ejecución llega a él. Si faltara un inicializador, la propia declaración sería un error de sintaxis.

Pregunta 5 de 10

¿Qué valor se muestra?

let balance = 14;
balance = balance + 9;
balance = balance - 4;
console.log(balance);
  1. 23
  2. 10
  3. 19
  4. 14
Mostrar respuestaOcultar respuesta
Respuesta: C
Cada asignación lee el saldo actual, calcula el lado derecho y después almacena el nuevo valor. El saldo pasa a ser 23 y luego 19, por lo que el registro final muestra 19. Mantener 23 supondría pasar por alto la segunda actualización; el 14 original no se restablece entre sentencias.

Pregunta 6 de 10

¿Qué valores se muestran y en qué orden?

let level = 4;
{
  let level = 9;
  console.log(level);
}
console.log(level);
  1. 9, después 9
  2. 4, después 9
  3. 9, después 4
  4. 4, después 4
Mostrar respuestaOcultar respuesta
Respuesta: C
La declaración interna crea su propia variable con ámbito de bloque, que proporciona el primer valor mostrado. Al salir del bloque vuelve a ser visible la variable externa sin cambios, por lo que el segundo valor es 4. El resultado sería 9 dos veces solo si la sentencia interna reasignara la variable externa en vez de declarar una nueva.

Pregunta 7 de 10

¿Qué cadena de caracteres devuelve typeof "28"?
  1. "number"
  2. "string"
  3. "object"
  4. "undefined"
Mostrar respuestaOcultar respuesta
Respuesta: B
Las comillas hacen que "28" sea una cadena de caracteres, aunque sus caracteres sean dígitos. typeof indica el tipo actual del valor y no convierte el texto en número. El resultado "number" describiría el valor 28 sin comillas, no el valor dado aquí.

Pregunta 8 de 10

Una longitud medida es de 386 cm. ¿Qué par proporciona sus metros completos y los centímetros restantes?
  1. Math.floor(386 / 100) y 386 % 100
  2. 386 / 100 y 386 % 100
  3. Math.round(386 / 100) y 386 % 100
  4. Math.floor(386 / 100) y 386 / 100
Mostrar respuestaOcultar respuesta
Respuesta: A
Redondear el cociente positivo hacia abajo da 3 metros completos, y el resto da los 86 centímetros restantes. La división sin más da 3,86, que no es un recuento de metros completos. Redondear el cociente al entero más cercano da 4, lo que supera el número de metros completos de la longitud.

Pregunta 9 de 10

¿Qué devuelve "catalog".slice(1, 4)?
  1. "atal"
  2. "cat"
  3. "tal"
  4. "ata"
Mostrar respuestaOcultar respuesta
Respuesta: D
Las posiciones de una cadena de caracteres empiezan en cero, por lo que el índice 1 es la primera «a». slice(1, 4) copia las posiciones 1, 2 y 3 y excluye la posición 4, dando "ata". Incluir la posición final añadiría incorrectamente la siguiente letra y produciría "atal".

Pregunta 10 de 10

Supón que no hay ninguna declaración cost anterior. ¿Qué se muestra antes de que se detenga este script?

let cost = 8;
{
  console.log(cost);
  let cost = 12;
}
console.log(cost);
  1. Nada; el primer registro encuentra una zona muerta temporal.
  2. 8; después falla la declaración interna.
  3. 12; después el registro externo muestra 8.
  4. undefined; después el registro externo muestra 8.
Mostrar respuestaOcultar respuesta
Respuesta: A
El enlace interno cost abarca todo el bloque y sombrea al externo incluso antes de su declaración. Por tanto, el primer registro lee un enlace interno sin inicializar y genera ReferenceError antes de mostrar nada. No puede recurrir al 8 externo ni leer el enlace interno como undefined.
Set 2: Construye texto y convierte datos de entrada10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué valor y tipo se muestran?

let amount = "6";
amount += 2;
amount++;
amount -= 4;
console.log(amount, typeof amount);
  1. 58, número
  2. 5, número
  3. 59, número
  4. "59", cadena de caracteres
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué devuelve "notes.txt".endsWith(".txt")?
  1. "txt"
  2. 5
  3. true
  4. "true"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué se muestra?

let tag = " mixed ";
tag.trim().toUpperCase();
console.log(tag.length);
  1. 7
  2. 5
  3. 6
  4. 0
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Dado const trays = 4; const massKg = 1.25;, ¿qué produce `Mass: ${(trays * massKg).toFixed(1)} kg`?
  1. "Mass: 5 kg"
  2. "Mass: 41.25 kg"
  3. "Mass: 5.00 kg"
  4. "Mass: 5.0 kg"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Con const name = "Mira";, ¿qué texto almacena const label = "Hello, ${name}";?
  1. "Hello, Mira"
  2. "Hello, ${name}"
  3. "Hello, undefined"
  4. "Hello, name"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Qué valor produce Number("18px")?
  1. NaN
  2. 18
  3. 0
  4. "18"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Se cancela un cuadro de entrada de cantidad. El código calcula inmediatamente Number(input). ¿Qué valor resulta y qué información se ha perdido?
  1. NaN; Cancelar deja de distinguirse del texto no válido.
  2. null; Cancelar sigue distinguiéndose del cero introducido.
  3. "0"; Cancelar deja de distinguirse del texto numérico.
  4. 0; Cancelar deja de distinguirse del cero introducido.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

¿Qué valor y tipo resultan de 6 + 2 + "4"?
  1. 12, número
  2. "624", cadena de caracteres
  3. "84", cadena de caracteres
  4. 84, número
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Después de const shown = (7.5).toFixed(2);, ¿qué produce shown + 1?
  1. 8.5
  2. "7.501"
  3. "8.50"
  4. "7.51"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Una entrada es una cadena de caracteres o null. Una cantidad debe estar presente, ser no negativa y numérica; se permite el cero. ¿Qué secuencia de validación cumple todos los requisitos?
  1. Convertir con Number; rechazar números falsos en contexto booleano; aceptar el resto.
  2. Rechazar null; usar parseFloat; rechazar NaN o valores menores que 0.
  3. Rechazar null o vacío; convertir con Number; rechazar valores menores que 0.
  4. Rechazar null o vacío; convertir con Number; rechazar NaN o valores menores que 0.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 3: Comprueba comparaciones y elige ramas10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Cuál es el resultado de "16" === 16?
  1. true
  2. "false"
  3. NaN
  4. false
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un sensor almacena sus lecturas como cadenas de caracteres. ¿Por qué "24" < "8" se evalúa como verdadero?
  1. Ambas cadenas se convierten en números antes de la comparación.
  2. Los primeros caracteres de texto que difieren son «2» y «8».
  3. La comparación comprueba el valor numérico de la cadena más corta.
  4. El operador menor que invierte el orden numérico de las cadenas.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Cuál es el resultado de evaluar 0 ?? 5?
  1. 0
  2. 5
  3. false
  4. null
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una lectura debe ser al menos 12 y no superar 28. ¿Qué condición comprueba ese intervalo con ambos extremos incluidos?
  1. reading > 12 && reading < 28
  2. reading >= 12 || reading <= 28
  3. reading >= 12 && reading <= 28
  4. 12 <= reading <= 28
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué se muestra?

const points = 76;
let badge;
if (points >= 60) {
  badge = "bronze";
} else if (points >= 75) {
  badge = "silver";
} else {
  badge = "none";
}
console.log(badge);
  1. «silver»
  2. «bronze»
  3. «none»
  4. «bronze silver»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Con const active = false;, ¿qué produce active ? "Ready" : "Waiting"?
  1. "Ready"
  2. false
  3. undefined
  4. "Waiting"
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué valor se muestra?

const mode = "2";
let label = "idle";
switch (mode) {
  case 2:
    label = "fast";
    break;
  default:
    label = "normal";
}
console.log(label);
  1. «normal»
  2. «fast»
  3. «idle»
  4. «fast normal»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Publicar requiere aprobación y el rol de editor o el de propietario. Con approved = false, isEditor = false e isOwner = true, el código usa approved && isEditor || isOwner. ¿Qué resultado da y qué condición aplica la regla completa?
  1. false; usar approved && (isEditor || isOwner)
  2. true; usar approved || (isEditor && isOwner)
  3. true; usar approved && (isEditor || isOwner)
  4. false; usar approved || (isEditor && isOwner)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Qué texto se muestra?

let route = "";
switch (3) {
  case 2:
    route += "A";
    break;
  case 3:
    route += "B";
  case 4:
    route += "C";
    break;
  default:
    route += "D";
}
console.log(route);
  1. «B»
  2. «BCD»
  3. «BC»
  4. «ABC»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Para const distance = 42;, ¿cuáles son los valores de 0 < distance < 20 y distance > 0 && distance < 20, respectivamente?
  1. false y false
  2. true y false
  3. true y true
  4. false y true
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 4: Sigue los errores e inspecciona la ejecución10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Un script calcula el área de un rectángulo sumando las longitudes de sus dos lados. Se ejecuta y muestra un área incorrecta sin mensaje de error. ¿Qué tipo de error es?
  1. Un error lógico.
  2. Un error de sintaxis.
  3. Un ReferenceError.
  4. Un error de carga.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

La ejecución se pausa en total = total + 7; cuando total es 11. ¿Qué valor aparece antes del paso a paso por procedimientos y cuál aparece después?
  1. 18 antes; 25 después.
  2. 11 antes; 11 después.
  3. 11 antes; 18 después.
  4. undefined antes; 18 después.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Quieres un mensaje de diagnóstico cada vez que se llegue a una línea, sin pausar ni editar el script. ¿Qué función del depurador corresponde?
  1. Un punto de interrupción de línea.
  2. Un punto de interrupción condicional.
  3. Un punto de interrupción por excepción.
  4. Un punto de registro.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Falta un registro de consola del inicio de un script y la consola muestra un 404 para la URL de ese script. ¿Qué debes comprobar primero?
  1. El tipo del total final calculado por el script.
  2. La ruta del script y si el archivo existe allí.
  3. El orden de las condiciones dentro del script cargado.
  4. El ámbito de las variables después de su última sentencia.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué ocurre cuando se carga este script?

console.log("Begin");
let size = 4;
let size = 7;
  1. Muestra «Begin» y después se detiene con un TypeError.
  2. Un SyntaxError impide que se ejecute cualquier línea de este script.
  3. Muestra «Begin» y después cambia size a 7.
  4. Muestra «Begin» y después se detiene con un ReferenceError.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Un total es incorrecto. Los registros muestran base: 13 number, extra: 4 string y total: 134 string. ¿Dónde debe comenzar la corrección?
  1. Convertir el total unido después de la suma.
  2. Dar formato al total unido con dos decimales.
  3. Cambiar la etiqueta que se muestra junto al total.
  4. Convertir la entrada adicional antes de la suma.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un programa pausado muestra raw = "27", fee = 6 y total = "276" justo antes de if (total > 100). ¿Qué cambio corrige la clasificación errónea como total alto?
  1. Usar Number(raw) + fee al calcular total.
  2. Usar Number(total) > 100 en la condición.
  3. Usar total >= 100 en la condición.
  4. Usar total === "276" en la condición.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Un script que se ejecuta al cargar la página muestra un resultado incorrecto. Estableces un punto de interrupción en su cálculo después de que la página termine de cargar, pero nunca se pausa. ¿Cómo puedes inspeccionar el cálculo y su resultado asignado?
  1. Reanudar el script terminado y después inspeccionar el resultado anterior de la asignación.
  2. Entrar paso a paso en la página terminada y después inspeccionar su texto fuente original.
  3. Recargar para llegar al punto de interrupción y después ejecutar la asignación paso a paso por procedimientos.
  4. Mover el punto de interrupción después del script y esperar a que se vuelva a ejecutar por sí solo.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

¿Qué mensajes se muestran antes de que este código se detenga?

console.log("One");
let current = 5;
current += unknownStep;
console.log("Two");

Supón que unknownStep no tiene ninguna declaración.

  1. Ningún mensaje; la actualización causa un SyntaxError.
  2. Ambos mensajes; el valor ausente se convierte en NaN.
  3. Solo «Two»; se revierte el registro anterior.
  4. Solo «One»; la actualización genera un ReferenceError.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Supón que se inicia una ejecución nueva para cada entrada. ¿Qué ocurre para null y para " 5 "?

const cleaned = input.trim() !== "" && input !== null;
const total = cleaned ? Number(input) + 2 : 0;
console.log(total);
  1. Null genera TypeError; el texto muestra 7.
  2. Null muestra 0; el texto muestra 7.
  3. Null genera TypeError; el texto muestra "52".
  4. Null muestra 0; el texto muestra "52".
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 5: Corrige cálculos y decisiones10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

¿Qué se muestra?

let stock = 0;
let status = "empty";
if (stock = 3) {
  status = "ready";
}
console.log(stock, status);
  1. 0 empty
  2. 0 ready
  3. 3 ready
  4. 3 empty
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

¿Qué devuelve Math.floor(-3.2)?
  1. -3
  2. -4
  3. 4
  4. 3
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

Con const count = 2;, ¿qué mensaje produce `Packed ${count} ${count === 1 ? "box" : "boxes"}`?
  1. «Packed 2 box»
  2. «Packed 2 false»
  3. «Packed 2 boxes»
  4. «Packed count boxes»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Una comprobación de sufijo debe aceptar cualquier combinación de mayúsculas y minúsculas. Para const label = "Draft.PDF";, ¿qué expresión reconoce la terminación PDF?
  1. label.toLowerCase().endsWith(".pdf")
  2. label.endsWith(".pdf")
  3. label.trim().endsWith(".pdf")
  4. label.toUpperCase().endsWith(".pdf")
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

Una conversión numérica fallida se almacena en value. ¿Qué comprobación detecta correctamente que ese valor es NaN?
  1. value === NaN
  2. typeof value === "NaN"
  3. value == NaN
  4. Number.isNaN(value)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

¿Qué valores contienen saved y total al final?

let total = 8;
const saved = total++;
total *= 3;
total -= saved;
  1. saved = 9, total = 18
  2. saved = 8, total = 16
  3. saved = 9, total = 19
  4. saved = 8, total = 19
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

Un recuento predeterminado debe ser 3 solo cuando el recuento original sea null o undefined. ¿Qué par de resultados producen count ?? 3 y count || 3 cuando count es 0, y qué expresión cumple la regla?
  1. 3 y 3; ambas expresiones cumplen la regla.
  2. 0 y 0; ambas expresiones cumplen la regla.
  3. 0 y 3; la expresión de coalescencia nula cumple la regla.
  4. 3 y 0; la expresión OR cumple la regla.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

Una insignia debe ser «gold» con 90 o más y «silver» de 70 a 89. ¿Qué tiene de incorrecto este resultado y qué cambio corrige los umbrales que se solapan?

const points = 94;
let badge;
if (points >= 70) {
  badge = "silver";
} else if (points >= 90) {
  badge = "gold";
} else {
  badge = "none";
}
  1. Asigna «gold»; comprobar 70 antes de 90.
  2. Asigna «silver»; comprobar 90 antes de 70.
  3. Asigna «silver»; cambiar >= 90 por > 90.
  4. Asigna «none»; cambiar >= 70 por > 70.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Después de convertir una respuesta de prompt, un programa usa if (!value) para rechazar entradas numéricas no válidas. El usuario introduce "0", "bad" o "-2". ¿Qué patrón de fallo tiene esta comprobación?
  1. Rechaza cero y NaN, pero acepta el número negativo.
  2. Acepta cero, pero rechaza NaN y el número negativo.
  3. Rechaza los tres porque ninguno es un número positivo.
  4. Acepta los tres porque las respuestas de prompt son cadenas de caracteres.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un total supera su límite solo para algunas entradas. Necesitas todos los valores locales en la primera línea de la rama de total alto sin pausar en los casos normales. ¿Qué debes establecer e inspeccionar?
  1. Un punto de registro en esa línea; inspeccionar el panel Scope pausado.
  2. Un punto de interrupción condicional en esa línea; inspeccionar Scope y Watch.
  3. Un punto de interrupción tras finalizar la ejecución; inspeccionar los valores anteriores.
  4. Un punto de interrupción por excepción; esperar a que el total incorrecto genere un error.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Set 6: Combina datos de entrada, tipos y flujo de control10 Preguntas de Práctica

Guarda esta unidad para ver todas las respuestas y practicar cada set.

Pregunta 1 de 10

Dos scripts clásicos externos dependen del orden del HTML y deben ejecutarse después de analizar el documento. ¿Qué atributo de carga deben usar ambos?
  1. async
  2. src por sí solo
  3. defer solo en copias integradas en HTML
  4. defer
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 2 de 10

Un registro muestra un valor cuyo typeof es "number", pero que nunca es igual a sí mismo. ¿Qué valor es y cómo debes comprobarlo directamente?
  1. NaN; usar Number.isNaN(value).
  2. null; usar value === null.
  3. undefined; usar value === undefined.
  4. Infinity; usar value === Infinity.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 3 de 10

¿Qué se muestra?

const massKg = 2.75;
const message = `Load: ${(massKg * 4).toFixed(2)} kg`;
console.log(message);
  1. «Load: 11 kg»
  2. «Load: 2.754 kg»
  3. «Load: 11.00 kg»
  4. «Load: 11.0 kg»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 4 de 10

Estableces un punto de interrupción en const cleaned = raw.trim(); y la ejecución se pausa ahí. ¿Cómo obtienes e inspeccionas el valor inicializado de cleaned?
  1. Inspeccionar cleaned antes de ejecutar la sentencia.
  2. Ejecutar la sentencia paso a paso por procedimientos y después inspeccionar cleaned.
  3. Reanudar y esperar una pausa en la línea siguiente.
  4. Salir de la función para omitir la inicialización de la variable.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 5 de 10

¿Qué se muestra?

const raw = "18";
const fee = 3;
const total = raw * 2 + fee;
const label = raw + fee * 2;
console.log(total, label);
  1. "363" y "186"
  2. 39 y 42
  3. 39 y "186"
  4. "363" y 42
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 6 de 10

Para una entrada que es una cadena de caracteres o null, ¿qué valor asigna este código a label cuando input es " "?

const input = "   ";
const cleaned = input !== null && input.trim();
const label = cleaned ?? "Guest";
  1. ""
  2. "Guest"
  3. false
  4. null
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 7 de 10

¿Qué se muestra?

const raw = "3";
let result = "";
switch (Number(raw)) {
  case 3:
    result += "M";
  case 4:
    result += "N";
    break;
  default:
    result = "X";
}
console.log(result);
  1. «M»
  2. «MN»
  3. «X»
  4. «MNX»
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 8 de 10

El registro final debe mostrar una etiqueta de envío para cada rama. ¿Qué corrección conserva el resultado externo deseado?

let label = "pending";
if (true) {
  let label = "sent";
}
console.log(label);
  1. Cambiar la declaración externa a const label = "pending";.
  2. Cambiar la declaración interna a const label = "sent";.
  3. Eliminar la declaración externa y conservar el registro final.
  4. Cambiar la línea interna a label = "sent";.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 9 de 10

Una medida puede ser null, NaN o un número. El intervalo válido incluye 0 y 10. ¿Qué comprobación acepta exactamente los valores numéricos de ese intervalo?
  1. !Number.isNaN(value) && value >= 0 && value <= 10
  2. value !== null && !Number.isNaN(value) && value > 0 && value < 10
  3. value !== null && !Number.isNaN(value) && value >= 0 && value <= 10
  4. value !== null && !Number.isNaN(value) && (value >= 0 || value <= 10)
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

Pregunta 10 de 10

Un script se carga sin error, pero muestra una media de 32 para las medidas 8, 12 y 36. El registro de la suma es 56; el cálculo es 8 + 12 + 36 / 3. ¿Qué diagnóstico y corrección coinciden con toda la información?
  1. Solo se divide 36; usar (8 + 12 + 36) / 2.
  2. Solo hay que agrupar parte de la suma; usar 8 + (12 + 36) / 3.
  3. Hay que agrupar los dos primeros valores; usar (8 + 12) / 3 + 36.
  4. Solo se divide 36; usar (8 + 12 + 36) / 3.
Mostrar respuestaOcultar respuesta

Guarda esta unidad para ver esta respuesta.

¿Te atascas con una pregunta tuya? Ayuda con Tareas

Términos Clave

85 Términos Clave, cada uno con su definición

A

Análisis del prefijo numérico
El análisis del prefijo numérico lee un número desde el comienzo de un texto y se detiene en el primer carácter que no corresponde al número.
La llamada parseFloat("6.2 kg") lee 6.2, mientras que Number("6.2 kg") rechaza toda la cadena de caracteres y da NaN.
Asignación
Una asignación evalúa una expresión a la derecha y almacena su valor en el enlace con nombre de la izquierda mediante el operador =.
La actualización count = count + 1; usa el recuento anterior para calcular el valor que lo sustituye.
Asignación compuesta
Una asignación compuesta combina una operación con el almacenamiento de su resultado, mediante un operador como +=, -= o *= sobre una variable existente.
Para let code = "7";, code += 2 almacena "72" porque la suma compuesta sigue la regla de unión de texto.
Atributo async
El atributo async permite que un script se descargue durante el análisis y se ejecute en cuanto esté listo, sin conservar el orden del HTML.
Un contador de visitantes independiente puede usar async cuando ningún otro script depende de que se ejecute primero.
Atributo defer
El atributo defer hace que un script clásico externo se ejecute después del análisis de HTML, al tiempo que permite descargarlo durante dicho análisis.
Dos scripts clásicos externos con defer se ejecutan en su orden en el HTML incluso si la segunda descarga termina primero.

Á

Ámbito de bloque
El ámbito de bloque es la región formada por un bloque y sus bloques anidados a la que pertenece un enlace let o const.
Un const message declarado dentro del cuerpo de un if no puede leerse después de que ese cuerpo termine de ejecutarse.
Ámbito global
El ámbito global es el ámbito de toda la página de los enlaces de nivel superior de scripts clásicos a los que otros scripts clásicos pueden acceder después de su inicialización.
Un script clásico posterior puede leer un let count de nivel superior establecido por un script clásico anterior.

B

Base numérica
Una base numérica es la base usada para interpretar dígitos; parseInt() la acepta como segundo argumento para indicar explícitamente la base deseada.
Usar parseInt("11", 10) lee el once decimal, mientras que parseInt("11", 16) lee el diecisiete decimal.
Booleano
Un booleano es uno de los dos valores true y false, producidos habitualmente por comparaciones y usados para representar resultados de sí o no.
La expresión heightM >= 2 devuelve un booleano que puede determinar si una altura cumple un requisito.

C

Cadena de caracteres
Una cadena de caracteres es una secuencia inmutable de unidades de código UTF-16 usada para representar texto, escrita entre comillas que coinciden o acentos graves.
Los dígitos de "203" forman texto que se puede unir o buscar sin convertirse en el número 203.
Cadena de condiciones else if
Una cadena de condiciones else if es una serie ordenada de condiciones que ejecuta la primera rama cuya condición se cumple y omite todas las ramas posteriores.
Comprobar primero la puntuación mínima más alta impide que un umbral más bajo capte demasiado pronto un resultado con mayor puntuación.
Caso predeterminado
Un caso predeterminado es el punto de entrada de switch que se usa cuando ningún valor de caso coincide con la entrada y proporciona un comportamiento para los valores sin coincidencia.
Un switch de modos puede asignar "normal" en default cuando la entrada no coincide con ninguno de sus modos especiales con nombre.
Coalescencia nula
La coalescencia nula es el operador ??, que elige un valor de respaldo solo para null o undefined y conserva otros valores falsos en contexto booleano.
Si count es 0, count ?? 3 conserva el cero, mientras que count || 3 lo sustituye por el valor de respaldo.
Coma flotante (punto flotante)
La coma flotante es una representación numérica que usa un conjunto finito de dígitos binarios, por lo que muchas fracciones decimales se almacenan de forma aproximada.
Una suma como 0.1 + 0.2 puede mostrar dígitos adicionales al final porque las fracciones almacenadas son aproximadas.
Comentario
Un comentario es texto marcado para las personas que leen el código y que JavaScript omite durante la ejecución, mediante // o una pareja de /* y */.
Poner // antes de un registro temporal impide que se ejecute y mantiene el texto disponible para más adelante.
Comparación
Una comparación evalúa una relación entre valores y produce true o false, por ejemplo, una coincidencia, una desigualdad o un límite.
La comparación massKg <= 20 incluye exactamente 20 y puede almacenarse como resultado booleano de una comprobación de límite.
Comparación relacional
Una comparación relacional comprueba el orden mediante <, >, <= o >=; dos cadenas de caracteres usan el orden textual, mientras que los operandos mezclados con números pueden convertirse.
La comprobación "30" < "7" es verdadera como texto, pero convertir ambos valores en números invierte ese resultado.
Concatenación
La concatenación une valores de texto en una nueva cadena de caracteres; el operador + hace esto cuando sus operandos primitivos ordinarios incluyen una cadena.
Unir "Good" + " " + "morning" incluye un espacio porque la cadena central lo proporciona explícitamente.
Conjunción lógica (AND)
La conjunción lógica es el operador &&, que requiere que se cumplan ambas comprobaciones booleanas y deja de evaluar en su primer operando falso en contexto booleano.
Una comprobación de intervalo une los límites inferior y superior con && para que una medida deba cumplir ambos requisitos.
Consola
La consola es un panel de las herramientas de desarrollo que muestra mensajes y errores de scripts y permite evaluar expresiones de JavaScript.
Introducir 6 * 7 en la consola de la página muestra 42 sin añadir una sentencia al script guardado.
Contexto booleano
Un contexto booleano es un lugar donde el valor de verdad de un dato decide el comportamiento, como una condición if o la comprobación de un operador lógico.
Un apodo no vacío supera una comprobación if, pero una cadena de caracteres vacía no, aunque ambos valores son de tipo string.
Continuación entre casos (fall-through)
La continuación entre casos es la ejecución que continúa desde un caso coincidente de switch hacia casos posteriores porque ningún break ni otra salida la ha detenido.
Las etiquetas case consecutivas pueden compartir una asignación intencionadamente, pero un break ausente también puede añadir una segunda etiqueta no deseada.
Conversión explícita
La conversión explícita es un cambio de tipo escrito deliberadamente por el programador mediante una operación como Number(), String() o Boolean().
Convertir input antes de añadir una tarifa deja claro que el programa espera un total numérico.
Conversión implícita de tipos
La conversión implícita de tipos es la conversión automática del tipo de un valor por parte de un operador o una condición, según las reglas de JavaScript para esa operación.
En "8" * 2, la multiplicación convierte implícitamente el texto en un número para el cálculo y produce 16.
Conversión numérica implícita
La conversión numérica implícita es la conversión automática a un valor numérico durante una operación que espera números, como la resta.
La expresión "14" - 2 produce 12 sin cambiar la variable que almacenaba originalmente la cadena de caracteres.

D

Declaración
Una declaración introduce un nombre en un ámbito mediante una palabra clave como let o const y también puede proporcionar su valor inicial.
La sentencia let result; declara una variable antes de que el código posterior decida qué valor almacenar en ella.
Depurador
Un depurador es una herramienta de desarrollo que puede pausar la ejecución, inspeccionar valores en el ámbito pausado y avanzar por el código paso a paso.
Pausar antes de una condición que usa un total puede revelar que el total es texto unido, aunque la condición posterior lo convierta en número.
Disyunción lógica (OR)
La disyunción lógica es el operador ||, que se cumple cuando se cumple al menos una comprobación booleana y deja de evaluar en su primer operando verdadero en contexto booleano.
Un indicador de miembro o un total que cumple el requisito pueden hacer que se cumpla una condición de envío; no tienen que cumplirse ambos.

E

Encadenamiento de métodos
El encadenamiento de métodos llama a un método sobre el valor devuelto por la llamada anterior, lo que permite escribir transformaciones compatibles en secuencia.
La expresión " Note ".trim().toLowerCase() primero elimina los espacios de los extremos y después convierte el resultado a minúsculas.
Enlace
Un enlace es la asociación entre un nombre y el valor al que hace referencia; const impide sustituir esa asociación después de la inicialización.
Cambiar una propiedad de un objeto const conserva su enlace porque el nombre sigue haciendo referencia al mismo objeto.
Error de referencia (ReferenceError)
Un error de referencia es un error que se genera cuando no se puede acceder a un enlace, por ejemplo, porque su nombre es desconocido o no está inicializado.
Un error de escritura en totl + 5 puede generar ReferenceError aunque exista cerca una variable total escrita correctamente.
Error de sintaxis
Un error de sintaxis es una infracción de la gramática de JavaScript que impide que se analice el script afectado y comience su ejecución.
Un paréntesis sin cerrar puede impedir incluso que se ejecute un registro de inicio anterior en ese mismo script.
Error de tipo (TypeError)
Un error de tipo es un error que se genera cuando una operación no es adecuada para su valor, incluida una llamada no válida o una reasignación prohibida de const.
Llamar a text.length() trata una propiedad numérica como una función, por lo que la operación genera un TypeError.
Error en tiempo de ejecución
Un error en tiempo de ejecución es una excepción generada mientras se ejecuta el código; si no se maneja, detiene esa ejecución en la operación que falla.
Una variable desconocida en una línea posterior puede detener el script después de que ya se hayan ejecutado sus sentencias de registro anteriores.
Error lógico
Un error lógico es un fallo en el razonamiento o el cálculo de un programa que permite ejecutar el código, pero produce un resultado incorrecto.
Dividir solo el último número de una suma puede mostrar una media incorrecta sin producir ningún mensaje de error automático.
Evaluación en cortocircuito
La evaluación en cortocircuito omite un operando cuando uno anterior ya decide el resultado, como ocurre con un operando izquierdo falso en contexto booleano en AND.
Comprobar primero input !== null en una condición de protección con AND puede evitar una llamada insegura a input.trim() cuando input es null.
Expresión
Una expresión es código JavaScript que se evalúa como un valor, que otra expresión o sentencia puede usar para operaciones posteriores.
La expresión price * count puede proporcionar un valor a una asignación o a un marcador de posición de plantilla.
Expresión de seguimiento
Una expresión de seguimiento es una expresión que el depurador vuelve a evaluar mientras avanza paso a paso para que puedas seguir un valor o una condición entre pausas.
Añadir typeof total a Watch puede revelar la sentencia exacta donde un valor numérico se convierte en una cadena de caracteres.

F

Formato
El formato cambia la forma en que se presenta un valor como texto, por ejemplo, añadiendo una cantidad fija de decimales, sin modificar el número original.
Usar (6).toFixed(2) dentro de una plantilla muestra "6.00" sin cambiar el valor numérico original.

I

Igualdad débil
La igualdad débil es la comparación realizada por ==, que puede convertir operandos de distintos tipos según sus propias reglas de igualdad.
La expresión "12" == 12 es verdadera después de la conversión, por lo que la igualdad estricta ofrece una comprobación de tipos más predecible.
Igualdad estricta
La igualdad estricta es la comparación realizada por ===, que no convierte los tipos de los operandos y rechaza valores de tipos distintos.
La expresión "12" === 12 es falsa porque el texto con dígitos coincidentes sigue siendo de un tipo distinto al de un número.
Incremento posfijo
El incremento posfijo es la forma name++ que aumenta la variable en uno, pero devuelve su valor anterior a la expresión que lo contiene.
Con let n = 3; const old = n++;, old recibe 3 mientras que la n actualizada pasa a ser 4.
Inicialización
La inicialización da a un enlace declarado su valor inicial; una declaración const debe incluir ese valor en la propia declaración.
En const widthM = 4;, el número 4 es el inicializador que deja el enlace listo para su lectura.
Inmutabilidad
La inmutabilidad significa que el contenido de un valor no puede cambiar directamente; las operaciones con valores primitivos producen valores nuevos.
La asignación text = text.trim(); sustituye el valor de la variable por una cadena de caracteres nueva en vez de editar la anterior.
Interpolación
La interpolación es la inserción de una expresión evaluada en el texto que la rodea, como hace JavaScript en los marcadores de posición de plantilla.
Con name = "Nora", la interpolación en `Hello, ${name}` crea el saludo «Hello, Nora».

Í

Índice
Un índice es una posición numerada que se usa para acceder a las unidades de código de una cadena de caracteres, empieza en cero y termina en la longitud menos uno.
En "planet", el índice 0 contiene "p" y el índice 5 contiene "t"; el índice 6 está más allá del final.

L

Leyes de De Morgan
Las leyes de De Morgan describen cómo la negación de una comprobación booleana combinada invierte cada operando y cambia AND por OR u OR por AND.
Un valor fuera de un intervalo con extremos incluidos está por debajo de su límite inferior O por encima de su límite superior, invirtiendo la comprobación de estar dentro.
Literal de plantilla
Un literal de plantilla es una cadena de caracteres delimitada por acentos graves que admite expresiones insertadas y saltos de línea literales en su texto.
Un mensaje como `Count: ${count}` coloca el recuento actual junto a su etiqueta descriptiva.

M

Marcador de posición
Un marcador de posición es la parte ${...} de un literal de plantilla donde se evalúa una expresión y se inserta su forma textual.
Dentro de `Mass: ${count * massKg} kg`, el marcador de posición calcula el total antes de insertarlo.
Método
Un método es una función a la que se accede mediante un valor u objeto y se llama con paréntesis para realizar una operación sobre él.
La llamada label.toLowerCase() produce texto en minúsculas, mientras que omitir los paréntesis no llama al método.
Modo estricto
El modo estricto es un modo de ejecución de JavaScript que convierte ciertos errores silenciosos, incluidas las asignaciones a nombres no declarados, en errores explícitos.
Iniciar un script clásico con "use strict"; ayuda a detectar una variable mal escrita en su primera asignación.
Motor de JavaScript
Un motor de JavaScript es el componente del navegador que lee y ejecuta código JavaScript, realizando sus cálculos y decisiones.
Cuando la página carga su script, el motor ejecuta console.log("Ready"); y la consola muestra «Ready».

N

Negación lógica (NOT)
La negación lógica es el operador !, que convierte un operando en booleano y lo invierte; aplicarlo dos veces da su valor en contexto booleano como booleano.
La expresión !"0" es falsa porque la cadena de caracteres no vacía es verdadera en contexto booleano antes de invertir su valor booleano.
Notación camelCase
La notación camelCase es un estilo de nombres en el que un nombre de varias palabras comienza en minúscula y cada palabra posterior comienza en mayúscula, sin espacios.
Los nombres firstName y totalMassKg muestran los límites entre palabras y siguen siendo nombres válidos de JavaScript.

O

Operador aritmético
Un operador aritmético realiza un cálculo como una suma, resta, multiplicación, división, resto o potencia.
La expresión massKg * count usa la multiplicación para calcular la masa total a partir de dos valores numéricos.
Operador condicional
El operador condicional es la expresión condition ? a : b, que evalúa una condición y devuelve el resultado de la expresión de valor seleccionada.
Una asignación breve puede elegir "open" o "closed" a partir de un booleano sin escribir dos ramas de asignación separadas.
Operador más unario
El operador más unario es el operador + aplicado a un solo operando para solicitar una conversión numérica, en vez de sumar dos operandos.
La expresión +"31" produce el número 31, mientras que "31" + 1 une texto y produce "311".

P

Paso a paso por procedimientos (step over)
El paso a paso por procedimientos es un control del depurador que ejecuta la sentencia actual y vuelve a pausar sin entrar en las funciones llamadas por esa sentencia.
Ejecuta una asignación paso a paso por procedimientos antes de inspeccionar su nuevo resultado, porque la línea resaltada no se ha ejecutado durante la pausa.
Precedencia
La precedencia es la regla que determina qué operadores se aplican primero en una expresión, a menos que los paréntesis cambien la agrupación.
En 4 + 6 * 2, la multiplicación se ejecuta antes que la suma, por lo que el resultado es 16 en vez de 20.
Punto de interrupción
Un punto de interrupción marca un lugar donde la ejecución debe pausarse antes de que se ejecute una sentencia, lo que permite inspeccionar el estado actual del programa.
Después de establecer un punto de interrupción en un script que se ejecuta al cargar, recarga la página para que la ejecución vuelva a llegar a esa sentencia.
Punto de interrupción condicional
Un punto de interrupción condicional pausa en su línea solo cuando una expresión proporcionada es verdadera, lo que ayuda a centrar la inspección en los casos relevantes.
Un punto de interrupción con la condición total > 200 omite los totales ordinarios menores y pausa cuando es necesario inspeccionar un resultado alto.
Punto de registro (logpoint)
Un punto de registro es una marca del depurador que muestra un mensaje cuando la ejecución llega a su línea sin pausar ni editar el script.
Un punto de registro puede mostrar cada valor al que se llega mientras la página sigue ejecutándose, a diferencia de un punto de interrupción que detiene la ejecución.

R

Rama
Una rama es un bloque de código seleccionado por una condición, que permite a un programa ejecutar instrucciones distintas para casos distintos.
Una rama else puede asignar una tarifa de entrega cuando la condición de entrega gratuita se ha evaluado como falsa en contexto booleano.
Resto (residuo)
Un resto es el valor que queda después de contabilizar las divisiones enteras; el operador % de JavaScript produce este valor.
Para una longitud positiva de 478 cm, 478 % 100 da los 78 cm que quedan después de los metros completos.

S

Script de módulo
Un script de módulo es un script cargado con type="module" que tiene su propio ámbito de nivel superior, usa el modo estricto y se difiere por defecto.
Una página servida localmente puede cargar <script type="module" src="js/main.js"></script> para su código de módulo.
Script externo
Un script externo es código JavaScript almacenado en un archivo independiente que un elemento script de HTML carga mediante su atributo src.
El elemento <script src="js/start.js"></script> conecta la página con código de una subcarpeta.
Script integrado en HTML
Un script integrado en HTML es código JavaScript escrito dentro de un elemento script de un documento HTML, entre sus etiquetas de apertura y cierre.
Un bloque breve <script>console.log("Hello");</script> puede mostrar un mensaje directamente desde una página HTML.
Secuencia de escape
Una secuencia de escape comienza con una barra invertida y representa un carácter como una comilla, un salto de línea, un tabulador o una barra invertida en una cadena de caracteres.
La secuencia crea un salto de línea dentro del texto incluso cuando el código está escrito en una sola línea.
Seguimiento de la ejecución
El seguimiento de la ejecución consiste en seguir la ejecución y los valores intermedios para localizar dónde difiere por primera vez el comportamiento real del resultado esperado.
Mostrar la suma y el divisor por separado puede acotar una media incorrecta al paso que agrupa las operaciones aritméticas.
Sentencia
Una sentencia es una instrucción de JavaScript que realiza una acción, como declarar una variable, asignar un valor o elegir una rama.
En let score = 8; console.log(score);, la sentencia de declaración se ejecuta antes que la sentencia que muestra el valor.
Sentencia switch
Una sentencia switch compara un valor de forma estricta con etiquetas case, entra en una coincidencia y continúa hasta un break o el final.
Un valor de cadena de caracteres "4" omite un case 4: numérico a menos que la entrada se haya convertido antes del switch.
Sombreado de variables (shadowing)
El sombreado de variables ocurre cuando un ámbito interno declara un nombre que ya se usa en un ámbito externo y oculta el enlace externo dentro del ámbito interno.
Declarar let total = 2 dentro de un bloque deja un total externo independiente sin cambios cuando termina el bloque.

T

Tipado dinámico
El tipado dinámico significa que los valores tienen tipos, mientras que una variable puede referirse a valores de distintos tipos después de una reasignación.
Después de let data = 5; data = "five";, typeof data indica el tipo del nuevo valor de cadena de caracteres.
Tipo de dato
Un tipo de dato es una categoría de valores que ayuda a determinar qué operaciones se aplican y cómo tratan esas operaciones a los valores.
Los valores 9 y "9" se muestran de forma similar, pero sus tipos explican por qué sumar uno da resultados distintos.
Tolerancia
Una tolerancia es un límite elegido para una diferencia numérica aceptable, usado cuando la precisión de un cálculo hace que la igualdad exacta no sea adecuada.
Comparar una diferencia decimal absoluta con un límite pequeño puede aceptar el ruido de redondeo sin exigir igualdad exacta.

V

Validación de datos de entrada
La validación de datos de entrada comprueba si un valor introducido cumple los requisitos de un programa antes de usarlo en operaciones posteriores.
Una comprobación de cantidad puede rechazar primero Cancelar y el texto vacío, y después rechazar NaN o números negativos tras la conversión.
Valor falso en contexto booleano (falsy)
Un valor falso en contexto booleano es un valor que se convierte en false al realizar una conversión booleana, incluidos cero, texto vacío, null, undefined y NaN.
Una cantidad numérica de 0 omite if (quantity), incluso cuando cero es una respuesta permitida en el programa.
Valor indefinido (undefined)
Undefined es el valor primitivo que suele usarse cuando no se ha proporcionado un valor, como después de ejecutar una declaración let sin inicializador.
Después de let nickname;, leer el enlace inicializado da undefined hasta que se produzca otra asignación.
Valor infinito (Infinity)
Infinity es un valor numérico especial que representa un resultado positivo sin límite; JavaScript también tiene el valor Infinity negativo.
El cálculo 8 / 0 devuelve Infinity, por lo que la división por cero no siempre genera una excepción.
Valor no numérico (NaN)
NaN es un valor especial del tipo number que indica un resultado o una conversión numérica no válida y no es igual a sí mismo.
Convertir "heavy" con Number() produce NaN, que Number.isNaN() puede detectar antes de hacer operaciones aritméticas.
Valor nulo (null)
Null es un valor primitivo que suele asignarse deliberadamente para representar un valor vacío o ausente en los propios datos de un programa.
Un prompt cancelado devuelve null, que el programa puede comprobar antes de intentar llamar a un método de cadena de caracteres.
Valor primitivo
Un valor primitivo es un valor de uno de los siete tipos primitivos de JavaScript, cuyo contenido no puede modificarse directamente.
Un método de cadena de caracteres devuelve un valor de texto nuevo; no puede reescribir el contenido de la cadena original.
Valor verdadero en contexto booleano (truthy)
Un valor verdadero en contexto booleano es un valor que se convierte en true al realizar una conversión booleana; las cadenas de caracteres no vacías son verdaderas en ese contexto independientemente de su contenido.
Las cadenas de caracteres "false" y "0" superan las comprobaciones de valor en contexto booleano porque ambas contienen caracteres y no están vacías.
Variable
Una variable es un enlace con nombre que hace referencia a un valor para que el programa pueda volver a leerlo y, si el enlace lo permite, reasignarlo.
Un nombre como distanceKm mantiene la distancia medida disponible para cálculos y mensajes posteriores.

Z

Zona muerta temporal
La zona muerta temporal es la parte del ámbito de un enlace anterior a su inicialización, donde acceder a un let o const genera ReferenceError.
Un let price interno impide que una lectura anterior en ese mismo bloque acceda a una variable price externa.

Sobre esta unidad

Por StudeliInformar de un error

Crea tus propios Materiales de Estudio

Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.

Comenzar