! operator w JavaScript

Jestem teraz zdezorientowany! operator w JavaScript. Moje zrozumienie było! operator działa tylko na boolean. Ale komentarz do jednego z moichodpowiedzi mówi, że może działać na czymkolwiek i zwraca wartość logiczną, która okazała się prawdziwa po wykonaniu niektórych testów.

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

Czy ktoś może mi pomóc uogólnić zachowanie! operator.

EDYTOWAĆ

Jeszcze bardziej mylące rzeczy:

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

W jaki sposób?

questionAnswers(5)

yourAnswerToTheQuestion