为了账号安全,请及时绑定邮箱和手机立即绑定

[已解决]js中!!有存在的必要么?为什么?

[已解决]js中!!有存在的必要么?为什么?

HUWWW 2018-09-02 13:26:03
业务背景浏览`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\问题既然结果都一样,那很多大佬写的代码为什么都要这样用呢?肯定不是多此一举吧
查看完整描述

1 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

作用是为了类型转换, 强制转换成布尔值.

至于为什么需要. 我来详细说说:

function isObjectLike(value) {}

我们期望 isObjectLike 的返回值是个 boolean. 但 && 操作的返回值是参与操作的操作数.

console.log(1 && 2) // 打印 2console.log(0 && 2) // 打印 0

所以如果我们传递给 && 的操作数不是布尔类型的, 那么我么得到的返回值就不是布尔值. 我们看看去掉 !! 会造成怎样的不一致性和bug.

function isObjectLike(value) {  return value && typeof value == 'object'; // 去掉 !!}

isObjectLike(0) === false // false 什么? 居然不相等?console.log(isObjectLike(0)) // 打印 0

你能想象一个叫 isObjectLike 的函数返回值类型却不是 boolean 值吗?


查看完整回答
反对 回复 2018-09-02
  • 1 回答
  • 0 关注
  • 709 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信