我已经和一位同事就这个话题争论了大约一个星期。我非常喜欢速记代码,尽可能使用三元组等。最近,他一直在指责我使用双重感叹号。在运行了无数次测试之后,我开始同意他的观点……在我的代码中使用双重感叹号可能并不明智。考虑一下:
var myvar = "Hello";
return (!!myvar ? "Var is set" : "Var is not set");
上面的示例按预期工作。然而,如果我们检查一个可能返回 undefined variable ,我们会得到一个错误,尤其是在 IE7 中。然而,如果我们在我们的控制台中运行它,我们会得到我们预期的结果:
if(randomvar) alert('Works');
使用这种方法,如果变量未定义,它会默默地失败。这让我质疑完全使用双重感叹号。是否存在实际使该运算符(operator)受益的情况?
最佳答案
!!
在 javascript 中有一个有效的用法。这是一个表达式,它将接受一个值并转换为 boolean 值 true
或 false
。它本质上将当前状态强制转换为 boolean 值。
这对双方都有好处
- 捕捉值(value)的真实性
- 释放原始对象以供收集(应该是最终引用)
- 有助于防止以后不正确地使用具有强制相等性的对象 (
==
)。并不能阻止它们,但将其强制为 boolean 值会删除一组场景。
关于javascript - JS 双感叹号——有什么好的理由使用它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7476729/