javascript - (true == x) === !!x 什么时候为假?

标签 javascript

JavaScript 有不同的相等性 comparison operators

  • 等于==
  • 严格等于===

它还有一个 logical NOT !我倾向于考虑使用双重逻辑非,!!x ,与true == x基本相同.

但是我知道情况并非总是如此,例如x = []因为[] !真实的但是对于 == 来说虚假 .

所以,对于x我们会 (true == x) === !!x给假?或者,==falsy 是什么?但不是 !! (反之亦然)?

最佳答案

"So, for which xs would (true == x) === !!x give false?"

任何 x,其 bool 转换与 Abstract Equality Comparison Algorithm 的转换不同.


一个例子是一个只有空格的字符串:

var x = " ";

它的 bool 转换是 true (与任何非空字符串的情况一样),但它的 == 比较是 false 因为只有空格的字符串将被转换为数字 0,而 true 值将被转换为数字 1,并且这些值不相等。

x == true; // false
!!x;       // true

或显示 == 正在比较的最终值:

Number(true) == Number(x);
 //      1   ==        0

1 == 0; // false

并显示 !!x 的结果,它等同于:

Boolean(x);  // true

因此您的原始表达式可以粗略地如下所示:

   var x = " ";

   (Number(true) == Number(x)) === Boolean(x);
// (         1   ==        0 ) ===        true
//                   ( false ) ===        true

   false === true; // false

我说“粗略地”是因为这肯定不会捕获上面链接的算法的所有细节,并且提供给操作数的所有值都不会相同。

要了解 == 如何处理其操作数,您确实需要稍微研究一下算法。

关于javascript - (true == x) === !!x 什么时候为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553222/

相关文章:

javascript - 隐藏的 JavaScript 负载

javascript - 迭代给定参数的方法

javascript - 获取自定义事件的 "this"引用

javascript - 你如何使用 Node 将分块视频上传到推特

javascript - 选项卡内容文件图像预览脚本不起作用

javascript - 如何使用 Cal-Heatmap 创建类似 Github 的连续日历?

javascript - 如果所选选项为空,如何防止提交?

javascript - Promise API - 合并 2 个异步调用的结果

javascript - 在 javascript 中检查元素是否为 'active' 的问题

javascript - 服务器端未定义 renderProps/React/React-Router + Node/Express.js 的同构渲染