Cross-browser compatibility. JS executes almost universally in the browser. True, this is not a tautology; it is not always necessarily so, but in reality the vast majority of you will be looking to do some sort of DOM manipulation. This is a problem, because a lot of browsers handle it differently. The event model, for instance, is different between the IE and Gecko engines. Window instantiation is handled differently. The W3C DOM specification is not implemented correctly in some browsers. So you end up writing loads of boilerplate code to cater for this.
OK, end of first post. My Mum’s calling. On to the next post, intrepid web developer; “The Things To Watch For”.