双感叹号? [复制]

2023-11-29

可能的重复:
是什么 !! JavaScript 中的(不是 not)运算符?
是什么意思啊!! JavaScript 中的运算符(双感叹号)是什么意思?

所以我正在调试一些代码并遇到了这个:

var foo.bar = 0; // this is actually passed from another function, adding it for context

function(foo) {
    var someVar = !!foo.bar;

    if (foo.bar) {
      // ..stuff happens
    } else {
      // .. something else happens
    }
}

好吧,我的问题是什么?!!?所做的一切就是使0 === false.

  1. 与相比,使用它有什么好处吗?boolean(foo.bar)?

  2. foo.bar 可以在 if 中进行计算,因为0 === false已经这样了,那为什么要进行转换呢? (someVar 没有在其他地方重用)


这会将值转换为布尔值并且确保布尔类型.

"foo"      // Evaluates to "foo".
!"foo"     // Evaluates to false.
!!"foo"    // Evaluates to true.

If foo.bar如果通过了,那么它可能不是 0,而是其他一些假值。请参阅下面的真值表:

JavaScript 真值表

''        ==   '0'           // false
0         ==   ''            // true
0         ==   '0'           // true
false     ==   'false'       // false
false     ==   '0'           // true
false     ==   undefined     // false
false     ==   null          // false
null      ==   undefined     // true
" \t\r\n" ==   0             // true

资料来源:道格·克罗克福德

当涉及到 NaN 值时,Javascript 也变得非常奇怪。这是我能立即想到的唯一情况!与 === 的行为不同。

NaN   ===  NaN     //false
!!NaN === !!NaN    //true

// !!NaN is false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双感叹号? [复制] 的相关文章

随机推荐

  • 将 ngx-pagination 实现为自定义组件

    我有两个组件 list component 和分页组件 在列表组件中我想编写列出记录的逻辑 并且我想使用ngx pagination npm 包控制给定列表的分页 列表 组件 html table class patients listin
  • 使用 AngularJS 将数据发送到 ASP.NET MVC 5 控制器的操作方法

    我用过Umbraco我的项目中使用 7 3 和 ASP NET MVC 5 我想从以下位置发送数据AngularJS to ASP NET MVC5 控制器 我该怎么做 回复 html div div
  • 同步块不锁定对象引用

    class Demo void demo System out println Inside demo of Thread currentThread getName try Thread sleep 1000000 catch Inter
  • scanf() 格式字符串中的空格[重复]

    这个问题在这里已经有答案了 include
  • 查找 SWT 浏览器的浏览器类型/版本

    我遇到 Eclipse SWT 浏览器无法在一台计算机上加载某些样式的问题 我希望机器使用 IE 10 作为本机浏览器 但我不确定如何确认这一点 有没有办法确定 SWT 决定加载页面的浏览器的类型 版本 基于这个问题的公认答案 如何检测浏览
  • 将列中的多种日期格式转换为单一形式

    我在数据框中有一列 其中包含以多种形式存储的日期信息 例如 dob lt c 18 02 1983 36782 01 11 1999 11 55 Dead 12 12 2001 Alive 03 07 1985 我想将所有这些转换为POSI
  • 如何按日期返回 MySQL GROUP BY 中的第一条记录?

    我在表中有 30 条记录 它们的标题相同 但每条记录的 ID 和日期不同 如何在查询中返回最新的日期 该表如下所示 Id Title Date 1 africa 2012 11 27 2 africa 2012 11 26 3 africa
  • 公共、私人、应用程序、服务器和/或测试文件的推荐 Dart 项目布局?

    推荐的是什么Dart 项目布局如果我同时拥有应用程序 客户端 和服务器代码以及私有库资源和测试文件 Dan Rubel 和 Eric Clayberg 分享的项目布局 在2013 12 18 Googleplex 日食日 是这样的 my a
  • 在后台 Swift 发送用户位置

    我正在构建一个应用程序 用户单击按钮 我们通过将他们的位置上传到服务器来跟踪他们 60 分钟 或任意时间 目前我们正在使用 更新位置 功能将用户位置实时发送到 firebase func locationManager manager CL
  • Primefaces 以编程方式打开可关闭对话框

    我想从支持 bean 动态创建一个 primefaces 对话框 我已经写了上面的代码 public void showDialog UIComponent panelGroup facesContext getViewRoot findC
  • FB.getLoginStatus 突然停止在 Android 浏览器上工作

    我曾经使用过这段代码 FB getLoginStatus function response 但突然间它不起作用 回调不会触发 但奇怪的是 仅适用于 android 本机浏览器 测试过 4 0 4 1 它适用于 iPhone iPad Ch
  • 反转颜色 OpenCV Java Api

    如何反转存储在中的图像的颜色Mat image在OpenCV的Java API中 使用image inv 给我一个错误 inv 用于计算逆矩阵 use 按位非反而 Core bitwise not image image
  • 如何在android中的自定义列表视图中实现搜索?

    我的应用程序中有一个编辑文本和一个列表视图 我的列表视图显示联系人列表 我想要带有编辑文本的列表视图过滤器 我在谷歌上搜索了很多 找到了一些例子 但没有一个对我有用 这是我的代码我的自定义适配器 public class ContactLi
  • 如何使用 jQuery 隐藏 ASP.Net CheckBoxList 控件中复选框周围的边框?

    我需要去掉由 CheckBox 控件呈现的各个复选框周围的边框 现在看起来是这样的 ASP Net 标记很简单
  • 从 Flask 视图发送 WebSocket 消息

    我正在尝试制作一个使用 WebSockets 的 Flask 应用程序 这来自 Flask socket 的示例可行 但我如何从常规视图发送消息 与 Flask SocketIO 的使用方式类似 emit and send 方法 在下面的示
  • Google::protobuf + boost::asio 失败

    我研究了现有的例子 使用 boost asio 发送 Protobuf 消息 使用 boost asio read async 读取 Protobuf 对象 Google Protocol Buffers C 的 parseDelimite
  • 移动刻度标签JavaFx 2

    是否可以将刻度标签移动 移动到图表中 目前我看到隐藏 显示刻度标签的 API 是否有可以在图表内移动刻度标签的 API 如果没有 API 那么我可以使用 应用某种技术来完成此任务吗 当前代码 public class Graph exten
  • 将强度点数组转换为标记

    所以我有这个代码 热图已经添加 但现在我需要为每个具有强度点的地方添加标记 我有纬度和经度以及强度 我还想使用该标记显示数据 我有这段代码 但无法为每个强度点添加标记并显示数据 div style width 100 height 600p
  • 在播放 m3u8 文件期间,ACodec 对 OMX_GetExtensionIndex 的调用失败

    这在某种程度上是问题的后续 m3u8 文件无法在 Android 模拟器中播放 我遇到了与那里提出的问题非常相似的问题 但是使用了 JB 已移植到的真实设备 项目详细信息位于 http groups google com group ren
  • 双感叹号? [复制]

    这个问题在这里已经有答案了 可能的重复 是什么 JavaScript 中的 不是 not 运算符 是什么意思啊 JavaScript 中的运算符 双感叹号 是什么意思 所以我正在调试一些代码并遇到了这个 var foo bar 0 this