请教,if(obj) 和 if(!!obj)有什么区别吗?

新手上路,请多包涵

如果if(obj)和if(!!obj)等效的话,直接使用前者岂不是更高效?

阅读 3.6k
6 个回答

确实等效。但是前者在语法规范上是错误的,会给人造成误解。而后者多两个!!,但并不会给你带来什么负担。

具体用哪个看你心情

新手上路,请多包涵

!!obj 强制转化了类型,更严谨,看实际业务场景取舍

!!是保证判断值是布尔型的,避免类型转换或者其他想不到的坑,相对严谨

没啥区别,但是就像聊天的时候多打两个感叹号是不是语气更重!!看起来更爽!!

没区别,if条件里的值值会进行强制类型转换为true/false,只不过是手动转换还是自动转换的问题罢了,既然会自动转换为什么要手动转换呢。

JS里false0""nullundefinedNaN是虚值,在转为Bool时会转为false.

JavaScript 里确实没区别(而且前者其实并不高效)。

但从语义上来说 !!obj 一定是一个 Boolean 类型,对于类型有要求的地方来说比较稳妥。如果只是单纯的 if 判断的话,简略成前者也无不可。

如果是 TypeScript 的话,当 obj 不是 Boolean 时,那么你就必须 !!obj 来转换了,这是强类型的约束要求。

推荐问题