Чем отличается for от for in

В ходе прочтения JavaScript: The Good Parts, сочинился пример, иллюстрирующий отличия оператора for от for in.
for...in не гарантирует порядок вывода элементов массива. Правда, это удалось увидеть только на примере с наследованием.

var stooge = [
    "Jerome",
    "Howard"
]

if (typeof Object.beget != 'function') {
    Object.beget = function(o) {
        var F = function(){};
        F.prototype = o;
        return new F();
    }
}

function Test() {
    var another_stooge = Object.beget(stooge);
    stooge[2] = 'actor';
    another_stooge[2] = 'baker';
    another_stooge.push('Moscow');
    for(var i in another_stooge) {
        console.log('for-in ' + i + ': ' + another_stooge[i]);
    }

    for(var i = 0; i<another_stooge.length;i++) {
        console.log('for ' + i + ': ' + another_stooge[i]);
    }
}

Test();

В консоли будет выведено следующее:

for-in 2: baker
for-in 3: Moscow
for-in length: 4
for-in 0: Jerome
for-in 1: Howard
for 0: Jerome
for 1: Howard
for 2: baker
for 3: Moscow

Объект another_stooge имеет прототип — stooge. И, соответственно, наследует от прототипа первые 3 значения.



Tags:
This entry was posted on Friday, March 20th, 2009 at 6:29 pm and is filed under Заметки. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Leave a Reply

Your comment