Javascript and weakly defined types (Part 2: Electric Boogaloo)

Javascript and its lack of strong typing continues to cause headaches.
Today's one is caused by the following bit of madness

if (true) {
    alert("true evaluates as true"); // will show
}

if (false) {
    alert("false evaluates as true"); // will not show
}


if ('true') {
    alert("'true' evaluates as true"); // will show
}

if ('false') {
    alert("'false' evaluates as true"); // will show
}

Any string that is not an empty string is treated as a true value automatically.

Be careful that any method or property that returns a true/false value returns it as a boolean value and not as a string