20
Mar
2009
Чем отличается 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();
"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
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: javascript
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.