Estoy tratando de entender por qué Javascript imprime una matriz vacía cuando debería tener al menos un valor dentro. Por favor, revisa este código:
detail = []; detail.cat1=[]; detail.cat2=[]; detail.cat3=[]; detail.cat4=[]; var newEntry = {"cod":"01","dt":"2021-10-02 09:07:21.205-07:00"}; detail.cat2.push(newEntry); console.log(detail); console.log(detail.length); console.log(detail.cat2);Los resultados son:
> Array [] > 0 > Array [Object { cod: "01", dt: "2021-10-02 09:07:21.205-07:00" }]¿Cómo podría imprimir [] ya que tengo un objeto dentro? ¿Y cómo puede la longitud ser cero? Estaba usando cualquier editor en línea de Javascript, y el resultado es el mismo.
Dado que una matriz es realmente un objeto, podemos agregar métodos/propiedades directamente a una matriz individual.
Entonces, si desea ver las claves en un objeto, por ejemplo, Object.keys no lo verá, pero Reflect.ownKeys() sí.
La versión Reflect de defineProperty devolverá éxito o falla, mientras que Object devuelve el objeto aprobado.
Recuerde que Reflect.preventExtensions() evitará (como dice) que usted u otros los extiendan.
En cuanto a la pregunta sobre la longitud, ".longitud" da la longitud de los valores, no las propiedades, por lo que todavía da 0
Array es una colección indexada de valores, lo que significa que puede colocar un elemento en un índice particular y obtener un elemento de un índice particular.
En el siguiente ejemplo, puede ver que si ya hay elementos en una matriz, puede obtener su length usando la propiedad de length .
Recuerde: la longitud de una matriz es (highest integer index at which the element is present in array + 1)
const arr = [1, 2, 3, 4]; console.log(arr); // prints whole array console.log(arr.length); // prints length of an array console.log(arr[2]); // Element at index 2 Si establece el elemento en un índice particular, digamos arr[8] = "something" , entonces su length será 9
const arr = []; arr[8] = "something"; console.log(arr.length) // 9Es cierto que las matrices son objetos, por lo que puede establecer/obtener valores desde/hacia la matriz. Pero si establece una propiedad que no es un índice numerado, no aumentará su longitud, pero establecerá la propiedad en ese objeto de matriz como:
const arr = []; arr["introduction"] = "I'm an array"; arr.property = "This is a property" console.log(arr.length); console.log(arr.introduction); console.log(arr.property);Cuando se muestra una matriz, generalmente se llama al método predeterminado Array.prototype.toString . Esto en realidad llama a Array.prototype.join sin argumentos, por lo que produce una cadena separada por comas de los elementos de la matriz.
El método de unión solo devuelve propiedades que tienen un nombre entero positivo (un índice de matriz, que indica un elemento de matriz); join ignora otras propiedades.
De manera similar, solo los elementos de la matriz afectan la propiedad de longitud , normalmente las propiedades (es decir, aquellas que no tienen un índice de matriz para su nombre) no afectan la longitud .