I can\'t seem to find a clear explanation as to what the difference is between these two. I\'d also like to point out that I don\'t really understand the difference between
!!x
, Boolean(x)
, new Boolean(x).valueOf()
[true, false, null, undefined, 1, 0, NaN, Infinity, "true", "false", "", [], {}, new Boolean(false)]
.forEach(e => console.debug(
[ !!e, Boolean(e), (new Boolean(e)).valueOf() ], e
))
// !!e, Boolean, valueOf
[true, true, true] true
[false, false, false] false
[false, false, false] null
[false, false, false] undefined
[true, true, true] 1
[false, false, false] 0
[false, false, false] NaN
[true, true, true] Infinity
[true, true, true] "true"
[true, true, true] "false"
[false, false, false] ""
[true, true, true] []
[true, true, true] Object {}
[true, true, true] Boolean {[[PrimitiveValue]]: false} // new Boolean(false)
Note:
Boolean(x) === !!x
typeof true == "boolean"
typeof Boolean(x) == "boolean"
typeof new Boolean(x) == "object" // not boolean!
typeof Boolean == "function"
Boolean(new Boolean(false)) == true // <- any object converted to boolean is true!
Boolean(new Boolean(false).valueOf()) == false