JavaScript has a bad rap. It's been crippled for years by shoddy implementations and the widespread use of amateur cut-and-paste code, but it's really started coming into its own as a programming language. I've come to love it over the past few months - though, like any tool, you must understand its limitations to use it effectively. And, of course, it's vital if you're doing anything with AJAX.
If you plan on doing any serious JavaScript programming, I highly recommend using Firefox (for its actually-useable JavaScript console) with the Web Developer Toolbar add-on (for its "View Generated Source" function). (Of course, you'll want to test things in IE6 and IE7 to make sure they work, but as a development and debugging tool, Firefox is far superior.)
Thanks to these tools and the recent trend toward standardized implementations of JavaScript and the DOM, it's actually possible to write complex, robust, scalable JavaScript that never throws an error. As you and others have pointed out, it's not appropriate for every situation, but if you can be confident that all of your users will have JavaScript enabled (such as when writing an intranet app) or if you're only using it to provide enhanced functionality, it can be very useful. The principles of unobtrusive JavaScript (Google it - it basically boils down to the separation of the presentation/content layer of a page from the behavior layer) help greatly in this area.
As an example of what I mean by "enhanced functionality", I recently wrote a JavaScript class that finds every <input type="text"> field with a class of "date". For each one, it inserts a little calendar icon next to the field; clicking on the icon brings up a little calendar, from which you can select a date. Users who don't have JavaScript simply don't see the icon; they can still enter dates manually. I have another class that adds a little expand/collapse icon to any <fieldset> with the class "collapsible" - again, users without JavaScript just see a regular <fieldset>. Autocompleting text fields would be another example. Once you have a few classes like these, it's very easy to create rich, gracefully degrading interfaces without adding a single line of JavaScript to your HTML code.