最佳方式(在浏览器测试布尔表达式)

!!()

!!(-0)
!!(null)

0、NaN、' '、null、undefined 转换为boolean,值都为flase

== 与 !!() 的区别

7==true//false
!!(7)//true

'a'==true//false
!!('a')//true

== 会自动转换,基本上是转为number 再比较

if()、while()、三元操作符、Boolean()、!!()等地方的表达式boolean 情况一样

不同于new Boolean() //这货返回的是一个Object,不是基础值

不同于 2==true 'a'==true 这些会自动转类型为数字后再比较

//true
1?true:false
1.5?true:false
2?true:false//所有正数
-1?true:false//所有负数//嘤?
Object?true:false
new Boolean(false)?true:false//new Boolean() 是个Objet,所以是true
[]?true:false//嘤?
'false'?true:false//非空字符串

//false
+0?true:false
-0?true:false
false?true:false
new Boolean(false).valueOf()?true:false
Boolean(false)
NaN?true:false
''?true:false
undefined?true:false
null?true:false

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

条件语句和循环语句这样用到布尔类型值的上下文中

使用强制类型转换将值转换为布尔值

https://developer.mozilla.org/zh-CN/docs/Glossary/Falsy

== === !() 非常全的例子

https://dorey.github.io/JavaScript-Equality-Table/

== 类型转换规则 https://github.com/jawil/blog/issues/1

  1. undefined == null,结果是true。且它俩与所有其他值比较的结果都是false。
  2. String == Boolean,需要两个操作数同时转为Number。
  3. String/Boolean == Number,需要String/Boolean转为Number。
  4. Object == Primitive,需要Object转为Primitive(具体通过valueOf和toString方法,Primitive 是原始值)。