Escribí una matriz simple donde tengo algunos elementos.
Después de eliminar un elemento, noté que mostraba "vacío" , pero esperaba un tipo de datos indefinido .
Ejecuté el mismo código en MDN y obtuve un resultado indefinido .
Ejecuté el código en diferentes navegadores, pero como resultado quedó "vacío" .
Cuando busqué el tipo de este elemento, me dio un resultado indefinido.
Me preguntaba por qué tengo 2 términos diferentes para algo donde los tipos son los mismos.
¡Gracias de antemano!
Culhaci Lucas - JeWelCrax
// code const pizzas = ["Margherita", "Mushroom", "Spinach & Rocket", undefined,"Pineapple & Sweetcorn"] delete pizzas[2]; console.log(pizzas); console.log(typeof pizzas[2]); // output ['Margherita', 'Mushroom', empty, undefined, 'Pineapple & Sweetcorn'] undefinedEsto es solo una rareza de la consola cuando muestra matrices dispersas.
Cuando se registra una matriz normal (no dispersa) en la consola, se mostrarán todos los elementos, con una coma entre ellos.
Cuando uno de esos elementos contiene el valor undefined , se mostrará undefined .
Cuando la matriz está libre , la matriz no tiene un valor en un índice en particular; más bien, es que la matriz no tiene ese índice en absoluto . Esta es una situación extraña, y para distinguirla de la matriz que contiene el valor undefined , la consola mostrará empty .
Es decir, se decidió que era útil poder distinguir
const arr = [1, undefined, 3] // arr now has own properties 1 and 2 and 3de
const arr = [1, 2, 3] delete arr[1]; // arr now has own properties 1 and 3En su código, la matriz en realidad contiene los mismos valores en MDN y en los navegadores; es solo que tienen diferentes formas de mostrar índices inexistentes.
La mejor manera de abordar este tipo de cosas es nunca tener arreglos dispersos: son confusos y no tienen mucho propósito en un código bien diseñado. Si desea tener una colección de claves y valores, donde las claves son números enteros pero no necesariamente todos existirán en orden ascendente, use un objeto en lugar de una matriz.
// This code is perfectly fine: const pizzas = { 0: "Margherita", 1: "Mushroom", 2: "Spinach & Rocket" // ... } delete pizzas[1]; Si desea una matriz y desea eliminar un elemento de modo que los índices se desplacen hacia abajo cuando se elimine un elemento, usaría .filter .
const pizzas = ["Margherita", "Mushroom", "Spinach & Rocket", undefined,"Pineapple & Sweetcorn"]; const pizzasWithoutSpinach = pizzas.filter((_, i) => i !== 2); console.log(pizzasWithoutSpinach);