javascript - 双感叹号 (!!) 在 JavaScript 中如何工作?

标签 javascript

我正在浏览 Discover Meteor 演示,并且正在努力弄清楚“返回!”到底是如何实现的。用户身份;'工作于 this section :

Posts.allow({
  insert: function(userId, doc) {
    // Only allow posting if you are logged in
    return !! userId;
  }
});

最佳答案

! 是逻辑否定或“非”运算符。 !!! 的两倍。这是一种将“true”或“falsy”值分别转换为 truefalse 的方法。给定一个 bool 值,! 将对值求反,即 !true 产生 false,反之亦然。给定 bool 值以外的值,该值将首先转换为 bool 值,然后取反。例如,!undefined 将首先将 undefined 转换为 false,然后对其取反,产生 true。应用第二个 ! 运算符 (!!undefined) 会产生 false,因此实际上 !!undefined 会转换 未定义false

在 JavaScript 中,值 falsenullundefined0-0NaN''(空字符串)是“假”值。所有其他值都是“真实的”。 (1):7.1.2以下是应用于各种值的 !!! 真值表:

 value     │  !value  │  !!value
━━━━━━━━━━━┿━━━━━━━━━━┿━━━━━━━━━━━
 false     │ ✔ true   │   false
 true      │   false  │ ✔ true
 null      │ ✔ true   │   false
 undefined │ ✔ true   │   false
 0         │ ✔ true   │   false
 -0        │ ✔ true   │   false
 1         │   false  │ ✔ true
 -5        │   false  │ ✔ true
 NaN       │ ✔ true   │   false
 ''        │ ✔ true   │   false
 'hello'   │   false  │ ✔ true

关于javascript - 双感叹号 (!!) 在 JavaScript 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312123/

相关文章:

javascript - 基于数据d3.js绑定(bind)svg渐变

javascript - Chrome是否保留每个对象的构造函数?

javascript - 从属组合框

javascript - 网格/ ListView 之间的淡入和淡出如何过渡?

javascript - 在继续之前等待函数执行

javascript - 为什么在使用 ajax 调用填充表后不使用 jquery 函数?

javascript - 我可以在 xampp (localhost) 中运行我的项目,但即使在配置后尝试在另一台计算机中运行时我也无法运行

javascript - 在 Express 中渲染包含 javascript src 文件的 HTML

javascript - 嵌套文本,垂直对齐不起作用 - React Native

javascript - Fabric Js Canvas 中剪辑部分中的多个对象