Я работаю над этой функцией анимации, но у меня есть проблема. Я не могу представить, что должно быть легкой задачей, я не могу получить длину объекта. Если вы заметили, что jsFiddle вы видите, что я запускаю alert(properties.length);, и он возвращает undefined. Может ли кто-нибудь понять, почему это может быть?
Литеральная длина объекта JavaScript === undefined?
Ответ 1
Объект JavaScript просто  не имеет свойство length, только Arrays. Если вы хотите узнать количество свойств, которые определены на объекте, вы должны перебирать их и считать их.
Кроме того, ваш цикл for in подвержен ошибкам, связанным с расширением Object.prototype, поскольку в нем будет проходить цепочка прототипов  и перечислены  все свойства, которые находятся на цепь.
Пример
// 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 объекта, чтобы отфильтровать эти нежелательные свойства.
// still the foo from above
for(var i in foo) {
    if (foo.hasOwnProperty(i)) {
        console.log(i); // only logs 'moo'
    }
}
Многие рамки JavaScript там расширяют прототип, а не используя hasOwnProperty, часто приводят к ужасным ошибкам.
Обновление
Относительно реальной проблемы, что ваш код не является анимацией обоих свойств.
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);
    }
    ....
 }
		Ответ 2
Это поддерживается в node.js и более новых средах.
var obj = {a: "a", b: "b"};
Object.keys(obj).length // 2
		Ответ 3
 Если вы используете Underscore.js, вы можете использовать _.size():
_.size({one : 1, two : 2, three : 3});
=> 3
		Ответ 4
Объекты не имеют длины, вам нужно будет использовать массив, если вы этого хотите.
Если вам нужно найти количество свойств в объекте, то есть только один способ:
var length =0;
for(var i in obj) length++;
		Ответ 5
Здесь @Junaid Qadir Shekhanzai общая функция для "нахождения длины объекта" (которая, как нам сказали, должным образом называться "подсчет свойств объекта" ). Он сочетает в себе решения от @Ivo Wetzel и @Martin Jespersen:
function countProperties(myObj){
    var length = 0;
    if(typeof myObj != 'object'){
        return false;
    }
    for(var i in myObj) {
    length++;
    }
    return length;
}