validar validacion vacios objetos formularios formulario enviar ejemplos con codigo campos array antes agregar javascript console.log

javascript - validacion - No se puede acceder a la propiedad del objeto, a pesar de que existe. Devoluciones indefinidas



validar formulario javascript html5 (27)

¡En 2018 Mozilla nos advierte en los Docs de Mozilla aquí !

Cito "Logging Objects" :

No utilice console.log(obj); , use console.log(JSON.parse(JSON.stringify(obj))); .

De esta manera, está seguro de que está viendo el valor de obj en el momento en que lo registra.

Esto me está desconcertando. No sé cómo explicar esto, pero aquí es cómo se ve mi código de depuración. Debajo puede ver el resultado de estos dos registros. El primero muestra claramente el objeto JavaScript completo con la propiedad a la que estoy tratando de acceder, pero el siguiente código de línea no puedo acceder a él con config.col_id_3 (¿ve "no definido" en la captura de pantalla?). ¿Alguien puede explicar esto? También puedo acceder a todas las demás propiedades, excepto field_id_4.

console.log(config); console.log(config.col_id_3);

Esto es lo que estos console.log () s imprimen en la consola


Acabo de encontrar este problema con los objetos generados por csv-parser desde un archivo CSV generado por MS Excel. Pude acceder a todas las propiedades excepto a la primera, pero se mostraría bien si escribiera el objeto completo con console.log.

Resultó que el formato CSV de UTF-8 inserta 3 bytes (ef bb bf) al comienzo correspondiente a un carácter invisible, que fueron incluidos como parte del encabezado de la primera propiedad por csv-parser. La solución fue volver a generar el CSV utilizando la opción no-UTF y esto eliminó el carácter invisible.


Acabo de tener el mismo problema con un documento cargado desde MongoDB usando Mongoose.

Resultó que estoy usando la propiedad find() para devolver solo un objeto, así que cambié find() para findOne() y todo funcionó para mí.

Solución (si está utilizando Mongoose): asegúrese de devolver solo un objeto, de modo que pueda analizar su object.id o se tratará como una matriz, por lo que debe acceder a él como ese object[0].id .


Acabo de tener este problema con un documento cargado desde MongoDB usando Mongoose .

Al ejecutar console.log() en todo el objeto, aparecerán todos los campos del documento (tal como están almacenados en la base de datos). Sin embargo, algunos _id propiedad volverían undefined , cuando otros (incluido _id ) funcionaron bien.

Resultó que los accesores de propiedades solo funcionan para los campos especificados en mi definición de mongoose.Schema(...) , mientras que console.log() y JSON.stringify() devuelven todos los campos almacenados en la db.

Solución (si está utilizando Mongoose) : asegúrese de que todos los campos de db estén definidos en mongoose.Schema(...) .


Compruebe si dentro del objeto hay una matriz de objetos. Tuve un problema similar con un JSON:

"terms": { "category": [ { "ID": 4, "name": "Cirugia", "slug": "cirugia", "description": "", "taxonomy": "category", "parent": null, "count": 68, "link": "http://distritocuatro.mx/enarm/category/cirugia/" } ] }

Intenté acceder a la clave ''nombre'' de ''categoría'' y obtuve el error indefinido , porque estaba usando:

var_name = obj_array.terms.category.name

Luego me di cuenta de que tiene corchetes, eso significa que tiene una matriz de objetos dentro de la clave de categoría, porque puede tener más de un objeto de categoría. Entonces, para obtener la clave ''nombre'' usé esto:

var_name = obj_array.terms.category[0].name

Y eso hace el truco.

Tal vez sea demasiado tarde para esta respuesta, pero espero que alguien con el mismo problema encuentre esto como yo antes de encontrar la Solución :)


En caso de que esto sea útil para alguien, tuve un problema similar, y es porque alguien creó una anulación para .toJSON en el objeto con el que estaba trabajando. Así que el objeto era algo así como:

{ foo: { bar: "Hello" baz: "World" } }

Pero .toJSON () era:

toJSON() { return this.foo }

Así que cuando llamé a JSON.stringify (myObject), me devolvió "{" bar ":" Hola "," baz ":" Mundo "}". Sin embargo, Object.keys (myObject) reveló el "foo".


En mi caso, pasaba un objeto a una promesa, dentro de la promesa estaba agregando más claves / valores al objeto y cuando se hizo, la promesa devolvió el objeto.

Sin embargo, una pequeña revisión de mi parte, la promesa fue devolver el objeto antes de que se terminara por completo ... por lo tanto, el resto de mi código estaba tratando de procesar el objeto actualizado y los datos aún no estaban allí. Pero al igual que arriba, en la consola, vi el objeto completamente actualizado, pero no pude acceder a las teclas; volvían indefinidas. Hasta que vi esto:

console.log(obj) ; console.log(obj.newKey1) ; // returned in console > Object { origKey1: "blah", origKey2: "blah blah"} [i] origKey1: "blah" origKey2: "blah blah" newKey1: "this info" newKey2: "that info" newKey3: " more info" > *undefined*

El [i] es un pequeño ícono, cuando me coloqué sobre él, dijo que el Object value at left was snapshotted when logged, value below was evaluated just now . Eso es cuando se me ocurrió que mi objeto estaba siendo evaluado antes de que la promesa lo hubiera actualizado completamente.


En mi caso, resulta que a pesar de que recibo los datos en el formato de un modelo como el objeto myMethod(data:MyModelClass) hasta que el objeto recibido fue de tipo cadena. Que es y en console.log (datos) obtengo el contenido. La solución es simplemente analizar el JSON (en mi caso)

const model:MyMOdelClass=JSON.parse(data);

El pensamiento puede ser útil.


Es posible que la propiedad a la que intenta acceder no exista todavía. Console.log funciona porque se ejecuta después de un pequeño retraso, pero ese no es el caso para el resto de su código. Prueba esto:

var a = config.col_id_3; //undefined setTimeout(function() { var a = config.col_id_3; //voila! }, 100);


Esto podría ayudar a alguien, ya que tuve un problema similar en el que JSON.parse () estaba devolviendo un objeto que podía imprimir en la consola.log () pero no pude acceder a los campos específicos y ninguna de las soluciones anteriores funcionó. yo. Como usar la combinación de JSON.parse () con JSON.stringify ().

var jsonObj = JSON.parse(JSON.stringify(responseText)) // where responseText is a JSON String returned by the server. console.log(jsonObj) ///Was printing the object correctly console.log(jsonObj.Body) /// Was printing Undefined

Terminé resolviendo el problema usando un analizador diferente provisto por ExtJs Ext.decode ();

var jsonObj = Ext.decode(responseText) console.log(jsonObj.Body) //Worked...


Excelentes sugerencias aquí. Lo agregaré ya que alguien puede encontrarlo útil.

Sea muy consciente del almacenamiento en caché, en el navegador o de forma remota.

Estaba luchando con esto, ya que estoy desarrollando en línea, e implementé una estrategia simple.

  1. Puse anti-caching en la carga del navegador de mi script js. quote: "agregue una cadena de consulta"? v = 1 "a todos los archivos .css y .js para evitar el almacenamiento en caché".
  2. Puse un registro de consola adicional que modifico antes de intentar una nueva solicitud: console.log (""); Si no veo este nuevo registro en la consola, sé que tengo un problema de caché en algún lugar.

Una vez que obtuve la sintaxis correcta, eliminé el retraso sugerido anteriormente y todo está bien. Para mí tenía que usar, "JSON.stringify ("


Excelentes sugerencias. Acabo de tener un problema similar así que mis dos centavos. Una cosa que solucionó el problema fue la adición de ''json: true'' en mis opciones de solicitud. (Eso depende de la biblioteca que use, sin embargo, la premisa general es la misma: especifique el formato de contenido que espera recibir).


La salida de console.log(anObject) es engañosa; el estado del objeto mostrado solo se resuelve cuando se expande > en la consola. No es el estado del objeto cuando console.log ''d el objeto.

En su lugar, intente console.log(Object.keys(config)) , o incluso console.log(JSON.stringify(config)) y verá las claves, o el estado del objeto en el momento en que llamó a console.log .

Por lo general, encontrará que las claves se agregarán después de la llamada de console.log .


Luché con este problema hoy y pensé en dejar una respuesta con mi solución.

Estaba buscando un objeto de datos a través de ajax, algo como esto: {"constants": {"value1":"x","value2":"y"},"i18n" {"data1":"x", "data2":"y"}}

Digamos que este objeto está en una variable llamada datos. Siempre que hice referencia a data.i18n obtuve undefined .

  1. console.log(data) mostró el objeto como se esperaba
  2. console.log(Object.keys(data)) dijo ["constants","i18n"] como se esperaba
  3. Cambiar el nombre de i18n a inter no cambió nada
  4. Incluso intenté cambiar los datos para hacer de "i18n" el primer objeto
  5. Moví el código para estar absolutamente seguro de que el objeto estaba completamente configurado y que no había ningún problema con la promesa de ajax.

Nada ayudó ... Luego, en el lado del servidor, escribí los datos en el registro de php, y reveló esto:

{"constants": {"value1":"x","value2":"y"},"/u045618n" {"data1":"x", "data2":"y"}}

La "i" en la clave de índice era en realidad un u0456 (cirílico i). Esto no estaba visible en mi editor de php o en el registro de la consola del navegador. Solo el registro de php reveló esto ... Eso fue complicado ...


Me enfrenté al mismo problema hoy. En mi caso las claves fueron anidadas, es decir, key1.key2. Dividí las teclas con split () y luego usé la notación de corchete, que funcionó para mí.

var data = { key1: { key2: "some value" } }

Divido las llaves y las use así, datos [clave1] [clave2] que hicieron el trabajo por mí.


Mis datos eran solo una cadena de datos json. (Esta variable se almacenó como cadena json en la sesión).

console.log(json_string_object)

-> devuelve solo la representación de esta cadena y no hay manera de hacer diferencia si es una cadena o un objeto.

Así que para hacerlo funcionar, solo necesitaba convertirlo de nuevo a objeto real:

object = JSON.parse(json_string_object);


No publico aquí mucho debido a la irritación de no tener suficientes publicaciones para comentar, pero el tipo que publicó esto a continuación tenía razón. La llamada ajax no se completó cuando intentó acceder al objeto. Incluso me gustaría ir más allá y usar 500 en lugar de 100 para el tiempo de espera, solo para estar seguro.

var a = config.col_id_3; //undefined setTimeout(function() { var a = config.col_id_3; //voila! }, 500);


Pruebe con config [0] o config [0] .col_id_3

También tuve este problema, pude ver un objeto, registrarlo, pero no para acceder a él desde el código. Entonces intenté agregar un [0] delante y resolví mi problema. Entonces podría acceder a todas las propiedades.


Si estás usando TYPESCRIPT y / o ANGULAR, podría ser esto !!!!

.then((res: any) => res.json())

configurando el tipo de respuesta a cualquier problema resuelto para mí, no pude acceder a las propiedades en la respuesta hasta que configuré res:

ver esta pregunta La propiedad ''_body'' no existe en el tipo ''Respuesta''


Tuve el mismo problema hoy. El problema fue causado por uglify-js. Después de que ejecuté el mismo problema de código no uglified se solucionó. Eliminación de

--mangle-props

de uglify-js fue suficiente para que funcionara el código uglified.

Quizás, la mejor práctica es usar algún prefijo para las propiedades que deben modificarse con la regla de expresiones regulares para uglify-js.

Aquí está la fuente:

var data = JSON.parse( content); ... this.pageIndex = parseInt(data.index); this.pageTotal = parseInt(data.total); this.pageLimit = parseInt(data.limit);

Y aquí está cómo fue uglificado:

var n = JSON.parse( t); ... this._ = parseInt(n.index), this.g = parseInt(n.total), this.D = parseInt(n.C)


Tuve el mismo problema y ninguna de las soluciones anteriores funcionó para mí y sentí como si fuera a trabajar después. Sin embargo, envolver mi código que crea el objeto en una función setTimeout hizo el truco para mí.

setTimeout(function() { var myObj = xyz; //some code for creation of complex object like above console.log(myObj); // this works console.log(myObj.propertyName); // this works too });


Tuve el mismo problema. La solución para mí fue usar la salida de cadena como entrada para analizar el JSON. esto funcionó para mí. espero te sea de utilidad

var x =JSON.parse(JSON.stringify(obj)); console.log(x.property_actually_now_defined);


Tuve este mismo problema al trabajar con una función que realiza una llamada ajax. En mi caso, estaba teniendo problemas para obtener un código de error válido del servidor. Esta es la función:

function getListItem(listItemUri){ return jQuery.ajax({ url: listItemUri, type: "Get", headers: { "accept": "application/json;odata=verbose" } }); }

El código a continuación era incorrecto y mostraría el objeto en la consola, pero no estaría definido al intentar acceder a él.

var list = getListItem(uri); var failed = list.fail(onerror); console.log(failed); //displays object which included a status console.log(obj.status); //but when trying to retrieve the status message it was undefined

El siguiente código me permitió acceder a los valores en el objeto. La clave estaba en usar list.fail como una función en lugar de asignarla a una variable.

var list = getListItem(uri); list.fail(function(obj){ console.log(obj); //displays object console.log(obj.status); //the object is now defined and I am able to see the error code returned by the server });


Tuve un problema como este, y encontré que la solución era hacer con Underscore.js. Mi registro inicial no tenía sentido:

console.log(JSON.stringify(obj, null, 2)); > { > "code": "foo" > } console.log(obj.code); > undefined

Encontré la solución mirando también las claves del objeto:

console.log(JSON.stringify(Object.keys(obj))); > ["_wrapped","_chain"]

Esto me llevó a darme cuenta de que obj era en realidad un envoltorio Underscore.js alrededor de un objeto, y la depuración inicial me estaba mintiendo.


Tuve un problema similar (al desarrollar para SugarCRM), donde comienzo:

var leadBean = app.data.createBean(''Leads'', {id: this.model.attributes.parent_id}); // This should load object with attributes leadBean.fetch(); // Here were my attributes filled in with proper values including name console.log(leadBean); // Printed "undefined" console.log(leadBean.attributes.name);

El problema estaba en fetch() , su llamada asíncrona, así que tuve que reescribir mi código en:

var leadBean = app.data.createBean(''Leads'', {id: this.model.attributes.parent_id}); // This should load object with attributes leadBean.fetch({ success: function (lead) { // Printed my value correctly console.log(lead.attributes.name); } });


Tuve un problema similar o tal vez solo relacionado.

Para mi caso, estaba accediendo a las propiedades de un objeto pero una estaba indefinida. Encontré que el problema era un espacio en blanco en el código del lado del servidor al crear la clave, el valor del objeto.

Mi enfoque fue el siguiente ...

Después de eliminar el espacio en blanco del código del lado del servidor que creó el objeto, ahora podría acceder a la propiedad como se muestra a continuación ...

Este podría no ser el problema con el caso de la pregunta del tema, pero fue para mi caso y puede serlo para otra persona. Espero eso ayude.


config = JSON.parse(config);

Tuve lo mismo, los datos eran un texto y no un JSON como esperaba.