作用:!! 将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false;
布尔型的转换,javascript约定规则为:
结果是 false 的情况:
false、0、undefinded、null、” ”(空字符串) 为 false
结果是 true 的情况:
true、1、”非空字符串”、任意数组,对象,函数(函数是特殊的对象)即使是空数组,空对象 为 true
特别注意:
字符串”0″转化成bool 为true ,数值0 转化为bool 为false
!与 !!
解释:一个!号表示 非 ,两个 !!号表示 非非,!!基本就只应用于将类型转换为布尔值。
举个例子:
var a;
console.log(a); //undefined
console.log(!a); //true
console.log(!!a); //false
以上代码定义了一个变量a 并没有赋值,所以结果是 undefined ,但是使用 !将undefined转换成了bool,但是undefined本身应该是false,结果是相反的,所以再加一个!使得结果转换成正确的bool值,
即 !!a 表示把a转换成bool值:a--> undefined-->false
所以 !!(双感叹号)的作用就是将后面的表达式强制转换为布尔类型的数据(boolean)
小结:
对null与undefined等其他用隐式转换的值,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,将这些值转换为“等价”的布尔值,如果明确设置了变量的值(非null/undifined/0/”“等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。