业务背景
- 浏览`lodash源码
- 发现了
!!
这个用法 - 查了一下,是两次取反的意思
- 但是没搞懂他存在的必要
示例代码
lodash官方源码
function isObjectLike(value) {
return !!value && typeof value == 'object';
}
我修改后的代码,即直接去掉!!
function isObjectLike(value) {
return value && typeof value == 'object';
}
我的困惑
-
官方代码的含义
- 就是取反之后再取反,最后来判断这个变量是否为真
-
我的代码
-
js
会根据数据类型以及变量值,自动判断他为真为假
-
比如传一个0进去
-
官方的步骤:
- !0 => true
- !true => false
-
我的步骤
- 0 => false\
问题
- 既然结果都一样,那很多大佬写的代码为什么都要这样用呢?肯定不是多此一举吧
作用是为了类型转换, 强制转换成布尔值.
至于为什么需要. 我来详细说说:
我们期望 isObjectLike 的返回值是个 boolean. 但 && 操作的返回值是参与操作的操作数.
所以如果我们传递给 && 的操作数不是布尔类型的, 那么我么得到的返回值就不是布尔值. 我们看看去掉 !! 会造成怎样的不一致性和bug.
你能想象一个叫
isObjectLike
的函数返回值类型却不是 boolean 值吗?