JS双感叹号
- 在JS中,我们常常会见到两个感叹号后面跟着一个变量【!!variable】,【!】是取反的意思,那【!!】不就是取反在取反,那跟直接写【variable】有什么区别呢?
区别在这:
- 首先,这种方式在JS中,属于一种类型转换的技巧,通常的用法就是将一个类型不是Boolean值【强制转换】成Boolean值。确保这个值或者这个表达式(or复杂的表达式)可以直接转化成【明确的Boolean值】。如果直接写,那么就只是代表那个变量的值而已。
const a = !!{}
const b = {}
console.log(a)
console.log(b)
注意:
- 这个方式不能用来判断【对象或者数组】是否为空,因为不管是空对象或者是空数组,转换成Boolean类型时,结果都是【true】
const a = !![]
const b = !!{}
console.log(a)
console.log(b)
- 另外,如果想将该方式运用在判断语句中的【条件表达式】中的话,那么下面这两个用法是完全等价的
const a = {};
// 用法1
【if(!!a){}】
【!!a ? '' : ''】
// 用法2
【if(a){}】
【a ? '' : ''】
- 所以【!!】一般情况下只用于将变量转换为【明确】的Boolean值
tip:
- 在框架【Vue、React】中,或者说在模板语句中,常常这么用
{!!variable && <Component />}
- 这个语句的意思是,如果【variable】为true,继续执行后面的代码,那么就会渲染【Component】这个组件。如果为false,则中断执行,不会执行后面的代码,也就不会把【Component】这个组件给渲染出来。