プロパティの順序が維持されないため、オブジェクト内のプロパティを並べ替えることができません。そのようなオブジェクトを作成し、プロパティをループアウトすると、オブジェクトに配置したのと同じ順序でプロパティが返されない場合があり、ブラウザによってプロパティが異なる順序で返されることがわかります。
値の順序を維持できるようにオブジェクトを配列にし、文字列を数値に効率的にマップできるようにルックアップ配列をオブジェクトにします。
var months = {
January: 1,
February: 2,
March: 3,
April: 4,
May: 5,
June: 6,
July: 7,
August: 8,
September: 9,
October: 10,
November: 11,
December: 12
};
var objects = [
{ name: 'April', value: 0 },
{ name: 'August', value: 4182 },
{ name: 'December', value: 0 },
{ name: 'February', value: 0 },
{ name: 'January', value: 1 },
{ name: 'July', value: 2 },
{ name: 'June', value: 0 },
{ name: 'March', value: 0 },
{ name: 'May', value: 0 },
{ name: 'November', value: 0 },
{ name: 'October', value: 0 },
{ name: 'September', value: 1518 }
];
オブジェクトを使用して配列をソートできるようになりました。
objects.sort(function(x,y) { return months[x.name] - months[y.name]; });
デモ: http://jsfiddle.net/7eKfn/