A user asked me a question in a recent training session.
Can you use a constructor to create primitives?
In other words:
var x = new Boolean(false);
I thought about it, and answered, “Sure. But why?” I mean, we aren’t programming in Java here. This type of constructor is also dangerous.
// Don't do this in production var maybeAlertUser = new Boolean(false); (maybeAlertUser === true); // this is false, but ... if (maybeAlertUser) { // this always alerts alert("Houston, we have a problem"); } alert(typeof maybeAlertUser); // object
We discussed that it is safe to use the object to type cast:
var x = 0; var maybeAlertUser = Boolean(x); if (maybeAlertUser) { // this never alerts alert("Houston, we have a problem"); } (maybeAlertUser === false); // yup!
The JavaScript idiom to use negation operator seems to be just as safe. In this instance, the first operation converts zero to a boolean and inverts the value (turning it to true). And the second inverts the value (turning it to false), but it strikes terror into Java coders.
var x = 0; var maybeAlertUser = !! x; if (maybeAlertUser) { alert("Houston, we have a problem"); // never alerts } (maybeAlertUser === false); // yup!
Which do you prefer?