! operador em JavaScript

Agora estou confuso! operador em JavaScript. Meu entendimento foi! operador opera somente em booleano. Mas um comentário para um dos meusrespostas diz que pode operar em qualquer coisa e retorna um booleano, o que aconteceu depois de alguns testes.

alert(!undefined); //true
alert(!function(){}); //false
alert(!{}); //false
alert(!null); //true
alert(!()); //crash
alert(!"false"); //false
alert(!false)​;​​​​​​​​​​​​ //true​​​​​​​​​​​​​​​​​​

Alguém pode me ajudar generalizar o comportamento de! operador.

EDITAR

Coisas ainda mais confusas:

​alert( new String() == ""); //true
alert(!""); //true
alert(! new String()); //false

Como? Detalhes

questionAnswers(5)

yourAnswerToTheQuestion