在偶尔看源码的过程中。
看到有些判断的用法是:
var a;
if(!!a){
console.log('打印')
}
为什么要用两个感叹号(❕)呢?
因为js 是弱类型,单纯用一个! 感叹号去转义可能会发生不必要的错误
这是知乎上的某个比较好的总结
双感叹号才能真正的将他转换成对应的Boolean值,第一个感叹号是将其转化成Boolean类型的值,但是这一操作得到的是其取反以后的值,在进行一次取反运算才能得到其对应真正的布尔值
转换成标准的布尔类型作为判断才比较好
console.log('-----单纯判断')
console.log('{}',{},typeof {})
console.log('[]',[],typeof [])
console.log('""',"",typeof "")
console.log('NaN',NaN,typeof NaN)
console.log('undefined',undefined,typeof undefined)
console.log('null',null,typeof null)
console.log('0',0,typeof 0)
console.log('-----单感叹号')
console.log('!{}',!{},typeof !{})
console.log('![]',![],typeof ![])
console.log('!""',!"",typeof !"")
console.log('!NaN',!NaN,typeof !NaN)
console.log('!undefined',!undefined,typeof !undefined)
console.log('!null',!null,typeof !null)
console.log('!0',!0,typeof !0)
console.log('-----双感叹号')
console.log('!!{}',!!{},typeof !!{})
console.log('!![]',!![],typeof !![])
console.log('!!""',!!"",typeof !!"")
console.log('!!NaN',!!NaN,typeof !!NaN)
console.log('!!undefined',!!undefined,typeof !!undefined)
console.log('!!null',!!null,typeof !!null)
console.log('!!0',!!0,typeof !!0)
这里是我作的简单分析,只是并没看出太大的区别。
因为本身双感叹号就是完全把本身的字段转换成布尔类型,所以判断会舒服一些。