为什么要这样写呢,写习惯了其它语言好像很少会这样写两个非。
字面理解就是非非得正,也就是等于原值,貌似写得多余了😂

其实是因为 JavaScript 是弱类型的语言,变量没有固定的数据类型,所以需要强制转换为相应的类型。

1
2
3
4
5
6
7
8
9
var v;

// 当 v = false、undefinded、null、0、""
!v == true;
!!v == false;

// 当 v = true、1、"somestring"、[Object]
!v == false;
!!v == true;

所以,两个感叹号就是为了当目标对象值并不确定时,强制转换为你需要的布尔值。