如果if(obj)和if(!!obj)等效的话,直接使用前者岂不是更高效?
没区别,if条件里的值值会进行强制类型转换为true/false,只不过是手动转换还是自动转换的问题罢了,既然会自动转换为什么要手动转换呢。
JS里false
、0
、""
、null
、undefined
和NaN
是虚值,在转为Bool时会转为false.
JavaScript 里确实没区别(而且前者其实并不高效)。
但从语义上来说 !!obj
一定是一个 Boolean
类型,对于类型有要求的地方来说比较稳妥。如果只是单纯的 if 判断的话,简略成前者也无不可。
如果是 TypeScript 的话,当 obj
不是 Boolean
时,那么你就必须 !!obj
来转换了,这是强类型的约束要求。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
确实等效。但是前者在语法规范上是错误的,会给人造成误解。而后者多两个!!,但并不会给你带来什么负担。
具体用哪个看你心情