For debugging purposes, alert can be sometimes counter-productive, but it is immediate. The problem with using alert in debugging scenarios is that it disrupts program flow. Whereas console.log benefits from allowing program flow to continue.
What you have to bare in mind though, is that console.log is not a standard property of window, it exists because third party tools such as Firebug, Inspector and IE Developer Tools extend the window object with the console object instance. If you end up leaving console.log statements in your code when you are not running something like Firebug, it can cause your scripts to fail.
Using alert in live code seems to be frowned upon, but it is perfectly logical to use, if that is the mechanism by which you wish to alert your user. E.g., if they try and submit invalid data, it is perfectly valid to throw a alert("Please enter XXX");. Of course, whether that provides the best user experience is another thing.
One other thing to consider, is that you can replace the alert function if wanted to, e.g.:
var oldAlertFunc = window.alert;
window.alert = function(message) {
console.log(message);
};