Where the system gets the 10 August date from should be obvious, even if you don't get why yet. But it's less easy to understand how it gets "10th March 2010" from "15/10/2009". So in case you missed it:
Assume for a moment the Date object has already decided it's using a "M/d/y" format, so the the first part (15) is the month. How would it handle that? What happens is that it starts with the year and builds the date "1/1/2009". It then advances to the 15th month, to give you March of 2010. Add the 10 days and there you go.
For the "why" of it, notice that you had to call toLocaleDateString()
to get it to output in your particular locale format. But your new Date()
makes no similar mention of locale anywhere. So it's just using it's invariant built-in culture.