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

新手上路,请多包涵

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

阅读 3.5k
6 个回答

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

具体用哪个看你心情

新手上路,请多包涵

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

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

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

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题