What's the difference between a boolean literal and a boolean value?

后端 未结 3 1466
醉酒成梦
醉酒成梦 2021-01-03 06:51

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

3条回答
  •  無奈伤痛
    2021-01-03 07:46

    Compared values of !!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
    

提交回复
热议问题