当前位置: 首页 > 面试题库 >

何时在JavaScript中使用double not(!!)运算符

洪和平
2023-03-14
问题内容

我了解doublenot运算符在JavaScript中的作用。我很好奇它的用法,以及我最近的断言是否正确,我对此很好奇。

我说这if (!!someVar)既没有意义,也不是(!!someVar && ...因为if&&都将someVar评估为布尔值,所以!!
是多余的。

实际上,我唯一想到使用double not运算符是合法的,是如果您想与另一个布尔值进行严格比较(因此可能返回的值显式地期望为true或false)。

它是否正确?当我注意到jQuery 1.3.2同时使用if (!!someVar)和时,我开始怀疑自己。return !!someVar && ...

在这种情况下,double是否没有任何实际作用?

我个人认为这只会导致混乱。如果看到if语句,则知道它正在将其评估为布尔值。


问题答案:

在我与您在一起的if陈述的上下文中,这是完全安全的,因为在内部,该ToBoolean操作将在条件表达式上执行
请参阅规范的第3步 )。

但是,如果要从函数返回布尔值,则应确保结果实际上是布尔值,例如:

function isFoo () {
  return 0 && true;
}

console.log(isFoo()); // will show zero
typeof isFoo() == "number";

总之,布尔逻辑运算符可以返回操作数 ,而不一定返回Boolean结果:

如果第一个 操作数真实的&&,则逻辑AND运算符()将返回 第二个操作数 的值: __

true && "foo"; // "foo"

如果它本身是 falsy ,它将返回 第一个操作数 的值: __

NaN && "anything"; // NaN
0 && "anything"; // 0

另一方面,如果第一个 操作数falsy ,则逻辑OR运算符(||)将返回 第二个操作数 的值: __

false || "bar"; // "bar"

如果它本身不是伪造的,它将返回 第一个操作数 的值:

"foo" || "anything"; // "foo"

也许这是值得一提的是, falsy 值是:nullundefinedNaN0,零长度字符串,当然false

布尔上下文中 评估的任何其他内容(不是 虚假的Boolean对象或Boolean值)都将返回。 __true



 类似资料:
  • 问题内容: 有人可以简单地向我解释什么是(有条件的“三元”)运算符,以及如何使用它? 问题答案: 这是if-else语句的单行缩写。它称为条件运算符。1个 这是可以通过条件运算符缩短的代码示例: 可以这样缩短: 与所有表达式一样,条件运算符也可以用作具有副作用的独立语句,尽管在缩小之外这是不常见的: 它们甚至可以链接: 但是要小心,否则最终将得到如下复杂的代码: 1 通常称为“三元运算符”,但实际

  • 问题内容: 我试图了解表运算符。 这是示例: 我的主要障碍是了解 何时 使用。 所以我想知道使用in实现的结果与上述相同将有多困难? 是否会使查询更短或更易读? 如果该示例没有显示使用的巨大优势,那么什么是使用显着的优势呢? 问题答案: 首先-可以调用 表值函数 ,其中参数值是从查询的表中获取的,如下所示: 或 切碎xml列 根据我的经验,当您需要进行一些 预先计算 时,它非常有用: 使用的另一个

  • 问题内容: 我正在尝试在Dropwizard上使用MYSQL JDBI进行IN查询(我认为不相关)。 如这里的建议,我还用 但是,当我启动应用程序时,出现以下错误: 有谁对解决这个问题有个好主意? 问题答案: 有两种方法可以实现它。 1 。使用 该注释期望StringTemplate中具有SQL语句的组文件 说我有这个文件PersonExternalizedSqlDAO 由于我们正在使用,因此必须

  • 问题内容: 我似乎找不到在JavaScript中重载[]运算符的方法。外面有人知道吗? 我在想… 还是我没有看正确的东西。 问题答案: 您可以使用ES6代理(在所有现代浏览器中都可用)进行此操作

  • 问题内容: 为什么当我在做时它起作用,但是当我在做时: 它不起作用? 为什么,以及如何解决? 完整代码: 但是这段代码可以正常工作: JSFiddle:https ://jsfiddle.net/69z2wepo/55100/ 问题答案: 这样一来,您就可以改变状态,因为它和做是同一件事。您永远不要改变状态(请参阅https://facebook.github.io/react/docs/comp

  • 嗨, 我还尝试使用com.querydsl.core.types.dsl.expressions和com.querydsl.core.types.predicate,如下所示: 但我得到了一个无效的运算符和错误。 怎么会这样呢?