This chunk of code seems like it's more complex than it needs to be. Should be able to write it something like:

    if (anyChanged(slots, items)) {
        for (var i = 0; i < items.length; i++) {
             slots[i] = new Item(items[i]);
       }
    }

    function anyChanged(slots, items) {
        if (slots.length !== items.length) return true;
        for (var i = 0; i < items.length; i++) {
            if (slots[i].type !== items[i]) return true;
        }
        return false
    }

This avoids the construction of a temporary array and a bunch of classes in the common case, which is when the data has not changed. It's also nicer to read :).

And I still don't really understand the point of the "initialized" variable. Won't we get "different" data in the first packet anyway, making it redundant?