双不(!!)vs JavaScript中的类型强制
在JavaScript中使用double not运算符除了表示显式转换之外,还有什么好处吗?现在,人们似乎经常喜欢使用double-not来检查是否存在新的API,但我从来没有读过它的任何优点双不(!!)vs JavaScript中的类型强制,javascript,type-conversion,not-operator,Javascript,Type Conversion,Not Operator,在JavaScript中使用double not运算符除了表示显式转换之外,还有什么好处吗?现在,人们似乎经常喜欢使用double-not来检查是否存在新的API,但我从来没有读过它的任何优点 if(!!window.File) // The File API is supported. else // Your browser sucks. 我读过的一件事是,它是一种简洁、晦涩的方式,可以将cast类型转换为boolean,但是,当在这种上下文中使用时,对象将自动强制转换为b
if(!!window.File)
// The File API is supported.
else
// Your browser sucks.
我读过的一件事是,它是一种简洁、晦涩的方式,可以将cast类型转换为boolean,但是,当在这种上下文中使用时,对象将自动强制转换为boolean,因为我们正在检查它是否已定义
简而言之,为什么人们要在引擎的顶部执行两个布尔运算?您不需要使用
代码>在if
表达式中。
它用于将值转换为布尔值,默认情况下,if
会执行此操作
var x = ""; // a falsy value
!x // true
!!x // false
if (x) === if (!!x)
我真的看不出有什么理由像你现在这样做。它不会以任何方式影响结果
我唯一认为这是个好主意的时候是,如果你正在构建一个应该返回bool值的函数,你需要从其他值中转换它,例如
function isNotFalsy(val) { return !!val; }
这个例子可能有点强迫,但你明白了。您总是希望确保返回值是用户期望的类型。如链接所示,它全局转换为布尔值。在这里,它主要是为了使代码更具可读性,这意味着只需要布尔值!!伪运算符有,这不是我要问的。它没有真正的用途,这是一个不好的习惯,因为它有借口可读性。你有我,所以现在唯一的问题是为什么它如此常用。@watkinsj它对坚持实际布尔值true
或false
值的API很有用(像一些jQuery API),而不仅仅是一个以后要铸造的价值。有时带有可选参数的API使用typeof
来计算一组特定参数的含义,因此如果需要传入一个真正的布尔值,
是一种快速(而且非常安全)的方法。这是一个习惯用法,任何有经验的JavaScript开发人员都应该熟悉这个习惯用法。感谢您的回答,但我知道这一点。问题是在if语句中使用它是否有任何好处,因为这是一种常见的做法。@watkinsj。我相信我在第一行回答了这个问题……你说没有必要。我在问题中指出了这一点。在if语句中,我看不到任何关于其扩散的优势或解释的答案。@watkinsj。没有,这就是为什么我没有写它们的原因…@watkinsj这只是一个坏习惯。不良行为有被广泛使用的趋势。没有比这更深刻的含义了。被认为是最好的,我想指出@Pointy一些API可能会===/typeof需要布尔值。