Some of the relevant values
1, 0, ' 1 ', ' 0 ', true, false, ' true ', ' false ', Nan, ' Nan ', Undefined, ' undefined ', null, ' undefined ', ', [], {}
true = = 1//true
true = = ' 1 '//true
true = = ' true '//false, except ' 1 ', true not equal to any other string
true = = NaN//false
true = = undefined//false
true = = NULL//false
true = = '//false
true = = []//false
true = = {}//false
false = = 0//true
false = = ' 0 '//true
False = = ' false '//false, except ' 0 ', false not equal to any other string
false = = NaN//false
false = = undefined//false
false = = NULL//false
false = = '//true
false = = []//true, this is actually true
False = = {}//false
if (1)//true
if (' 1 ')//true
if (' true ')//true
if (' false ')//true
if (' NaN ')//true
if (NaN)//false
if (' undefined ')//true
if (undefined)//false
if (' null ')//true
if (null)//false
if (')//false
if ([])//true
if ({})//true
Conversion rules are not good to master, write code when the old thinking of these rules too cumbersome, and later without the if (name) such code, also do not have to = =.
JavaScript Boolean types and other types of conversions