I see the same result in JS as in Elm in the browser:
> new Date("2018-01-06")
Sat Jan 06 2018 01:00:00 GMT+0100 (CET)
> new Date("2018-01-06").toString()
"Sat Jan 06 2018 01:00:00 GMT+0100 (CET)"
And I don’t even get the same result as you in node (see how it morphs it into the fifth), if you call .toString() you see it with the time zone:
> new Date("2018/01/06")
2018-01-05T23:00:00.000Z
> new Date("2018/01/06").toString()
'Sat Jan 06 2018 00:00:00 GMT+0100 (CET)'
Seems like there is some sort of inconsistency between Node.js and browser environments (I tested in Chrome 63 and Node v9.3.0). So, no, JS didn’t get it right really 
Which Node.js version did you use that has a Date constructor that doesn’t take the locale timezone into account?