if 接受“A condition expression that evaluates to true or false”,并非必须PrimitiveBoolean类型。
在《ECMAScript Spec》中,if (value)的语义相当于:if (ToBoolean(value))。
而Logical Not的语义相当于:not ToBoolean(value)。
即!!val相当于ToBoolean(value)。
也就是说:if (!!value)的语义相当于if(ToBoolean(ToBoolean(value)))。
如果你认为这种写法是合理的,那你为什么不继续写道: if (!!(!!value))、 if (!!(!!(!!value)))
……?
请君一读《What the Tortoise Said to Achilles》
什么时候需要使用Logical Not !来转换类型呢?一般函数传参或返回值有这个必要。如果函数文档中说它返回一个Bool类型的值,那么函数作者就有责任保证其返回值的类型为(Primitive)Boolean。因为函数的使用者可能会写出依赖返回值类型的代码:
没有任何区别。这种写法只是想当然而已。我反对
if (!!var1)的写法。同样无聊的写法还有:
if ((var1 == var2) == true)。if 接受“A condition expression that evaluates to true or false”,并非必须PrimitiveBoolean类型。
在《ECMAScript Spec》中,
if (value)的语义相当于:if (ToBoolean(value))。而Logical Not的语义相当于:
not ToBoolean(value)。即
!!val相当于ToBoolean(value)。也就是说:
if (!!value)的语义相当于if(ToBoolean(ToBoolean(value)))。如果你认为这种写法是合理的,那你为什么不继续写道:
if (!!(!!value))、if (!!(!!(!!value)))……?
请君一读《What the Tortoise Said to Achilles》
什么时候需要使用Logical Not
!来转换类型呢?一般函数传参或返回值有这个必要。如果函数文档中说它返回一个Bool类型的值,那么函数作者就有责任保证其返回值的类型为(Primitive)Boolean。因为函数的使用者可能会写出依赖返回值类型的代码:同作向函数传参也需要注意类型:
这种问题都问,不动大脑不会搜索。
!!是转换成boolean
而什么都不加只是一个变量