Разбирался сегодня с багами в IE и в очередной раз убедился, что делать обход по объектам надо правильно.

Когда у нас есть обычный массив, можно делать так:

for (var key in obj) {
    var value = obj[key];
}

Если вы конечно не подсунули чего в прототип массива. Вообще на эту тему есть довольно много споров, поэтому для массивов рекомендуется делать только так:

for (var key = 0; key < arr.length; key++) {
    var value = arr[key];
}

Но стоит нам начать работу с объектом, как вероятность того, что  в key может прилететь какое-нибудь свойство из прототипа резко возрастает, особенно характерно для IE.

Решение простое и известное. Рекомендую использовать только так. Всегда.

for(var prop in object) {
    if (object.hasOwnProperty(prop)) {
        var value = obj[key];    
    }
}

Или сокращенный вариант:

for(var prop in object) if (object.hasOwnProperty(prop)) {
    var value = obj[key];
}

Если вы ленивы, любите jQuery, и вас не напрягают лишние вызовы функций — можете использовать jQery.each или jQuery.map

Рубрика: IT.

Делаю тут первые шаги в node.js. Сижу работаю, сохранил 5+Мб данных в json файл.

Все отлично, файл сохранился, теперь надо прочитать. Использую:

fs.readFile + JSON.parse

И тут меня эти ребята жестко прокатывают, ломаясь в непонятном месте.

И решение находится красивейшее. Делаем:

var data = require('./filename.json');

И в объекте data у нас json объект. Распарсенный и готовый к работе.

Рубрика: IT.