javascript - JS 双感叹号——有什么好的理由使用它吗?

标签 javascript operators boolean shorthand

我已经和一位同事就这个话题争论了大约一个星期。我非常喜欢速记代码,尽可能使用三元组等。最近,他一直在指责我使用双重感叹号。在运行了无数次测试之后,我开始同意他的观点……在我的代码中使用双重感叹号可能并不明智。考虑一下:

var myvar = "Hello";
return (!!myvar ? "Var is set" : "Var is not set");

上面的示例按预期工作。然而,如果我们检查一个可能返回 undefined variable ,我们会得到一个错误,尤其是在 IE7 中。然而,如果我们在我们的控制台中运行它,我们会得到我们预期的结果:

if(randomvar) alert('Works');

使用这种方法,如果变量未定义,它会默默地失败。这让我质疑完全使用双重感叹号。是否存在实际使该运算符(operator)受益的情况?

最佳答案

!! 在 javascript 中有一个有效的用法。这是一个表达式,它将接受一个值并转换为 boolean 值 truefalse。它本质上将当前状态强制转换为 boolean 值。

这对双方都有好处

  1. 捕捉值(value)的真实性
  2. 释放原始对象以供收集(应该是最终引用)
  3. 有助于防止以后不正确地使用具有强制相等性的对象 (==)。并不能阻止它们,但将其强制为 boolean 值会删除一组场景。

关于javascript - JS 双感叹号——有什么好的理由使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476729/

相关文章:

javascript - 如何在firebase中检索当前用户数据

javascript - AngularJS:[$injector:strictdi] 为 ngAutocomplete 加载指令时出错

c++ - 模板化 operator() 重载 C++

sql - 我可以将一堆 boolean 列转换为 PostgreSQL 中的单个位图吗?

json - Perl: JSON::XS 是否可以强制 boolean 解码为 1/0?

c# - 如何在 C# XNA 中创建 Wait() 方法?

javascript - 以 javascript 形式记录 Bson 查询

javascript - 如何在 amp-video 中显示 m3u8 URL 视频

r - 为 Date 类创建一个新的加法运算符

c++ - 我怎样才能 Eloquent 地写 "if not greater than or equal to some value"?