variable vacio vacia una saber objeto esta error comprobar javascript object properties object-literal

vacio - undefined javascript error



Longitud literal del objeto de JavaScript=== undefined? (5)

Aquí está la función general de @Junaid Qadir Shekhanzai para "encontrar la longitud de un objeto" (que, como se nos dice, debería llamarse "contar las propiedades de un objeto"). Combina soluciones de @Ivo Wetzel y @Martin Jespersen:

function countProperties(myObj){ var length = 0; if(typeof myObj != ''object''){ return false; } for(var i in myObj) { length++; } return length; }

Estoy trabajando en esta función de animación, pero tengo un problema. Parece que no puedo realizar lo que debería ser una tarea fácil, no puedo obtener la longitud de un objeto. Si echas un vistazo a jsFiddle, puedes ver que estoy en alert(properties.length); y está volviendo undefined . ¿Alguien puede ver por qué esto podría ser?


El objeto JavaScript simplemente no tiene una propiedad de length , solo Arrays do. Si desea saber la cantidad de propiedades definidas en un objeto, debe iterar sobre ellas y contarlas.

Además, su bucle for in es propenso a errores debido a la extensión de Object.prototype ya que atravesará la cadena de prototipos completa y enumerará todas las propiedades que están en la cadena.

Ejemplo

// Poisoning Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { console.log(i); // logs both ''moo'' AND ''bar'' }

hasOwnProperty usar el método hasOwnProperty en el objeto para filtrar esas propiedades no deseadas.

// still the foo from above for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); // only logs ''moo'' } }

Muchos frameworks de JavaScript extienden el prototipo, no usar hasOwnProperty menudo conduce a errores horribles.

Actualizar

En cuanto al problema real de que tu código no es animación, ambas propiedades.

for(var p in properties) { ... for(var i = 0; i <= frames; i++) { setTimeout((function(exti, element) { return function() { // p gets overriden by for outer for in loop element.style[p] = original + (pixels * exti) + ''px''; } // you need to pass in a copy of the value of p here // just like you do with i and element })(i, element), i * (1000 / 60), element); } .... }


Esto es compatible con node.js y entornos más nuevos.

var obj = {a: "a", b: "b"}; Object.keys(obj).length // 2


Los objetos no tienen longitud, tendrás que usar una matriz si así lo deseas.

Si tiene que encontrar el número de propiedades en un objeto, solo hay una forma:

var length =0; for(var i in obj) length++;


Si está utilizando Underscore.js , puede usar _.size() :

_.size({one : 1, two : 2, three : 3}); => 3