返回的布尔值转换为布尔值

Posted

技术标签:

【中文标题】返回的布尔值转换为布尔值【英文标题】:The returned Boolean value converted to the Boolean value 【发布时间】:2018-01-24 06:21:11 【问题描述】:

这里是一些代码:Infinity Loop Slider Concepts,有布尔语句,返回真或假,然后再次使用双运算符(!)将其转换为布尔值,代码行:

cycle = !!(current === 0 || current > len);

所以我知道为什么 autor 使用 !!(//code) 很有趣! сonverts the value to a logical true / false ,但代码已经返回布尔值 (current === 0 || current > len) // true / false。 请解释或(!!)是不必要的?

【问题讨论】:

这里不需要!!。您可能想评论该帖子并询问。 谢谢,这个问题已经够老了,所以我以为作者不会回答,所以我创建了一个新问题 【参考方案1】:

在这个例子中没有任何意义,因为条件可以是真或假

通过双重否定,您强制“循环”成为“truthy 或 falsy”值

假设您运行此代码

if (variable.guess) 
    // would be executed if variable.guess containts a not falsy value

这并不意味着

variable.guess === true

【讨论】:

谢谢,如果我使用!!(variable.guess),(variable.guess === true) 将是真的。如果我们有布尔类型,则不需要 (!!)? 你的第一句话似乎与这个答案的其余部分相矛盾,或者你只是不清楚你想说什么。 没错。如果它像!!(current || somethingElse) 一样,那将是必需的,因为从技术上讲 ||作为运算符返回任何一个真实的参数,这意味着不是严格的布尔值。 @Alex 就是这样 (!!) 你可以 100% 确定它是布尔类型【参考方案2】:

|| 运算符的行为如下:

a || b // returns a if a is truthy
a || b // returns b if a is falsy

这就是为什么您会看到它用于设置默认值

var foo = bar || 'something'; // if bar is falsy (like undefined) the operator returns 'something'

正如前面的答案中提到的,current === 0current > len 都是布尔类型,因此通常用于将值转换为纯布尔类型的 !! 在这里没有任何价值,因为 Boolean || Boolean 已经返回一个布尔值。

但是,虽然有问题的代码是错误的或不必要的(在我看来是错误的),但这并不意味着它在 javascript 中不是一个棘手的部分。

通常你在 Javascript 中想要的只是被强制转换为布尔类型的值,但假设你绝对需要一个布尔值并且你有以下代码:

var result = current || current > 5

如果current === 'foo' 那么result === 'foo'

如果您在代码后面使用result 做某事会怎样 喜欢:

finalResult = result + 1

如果result === 'foo'finalResult === 'foo1' 但如果result === falsefinalResult === 1

这些时候你只是希望你使用的是静态类型语言。

实际上,您在 Javascript 中需要的只是类型强制,并且只在将字符串与变量连接时才关心这些特殊的事情。

【讨论】:

【参考方案3】:

===返回布尔值,即current === 0返回布尔值,>返回布尔值,即current > len返回布尔值,即current === 0 || current > len返回布尔值。再次将其转换为布尔值绝对是多余的。

【讨论】:

以上是关于返回的布尔值转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章

将布尔值转换为整数值php

返回值为布尔值的方法

将 0 和 1 字符串转换为布尔值的最 Pythonic 方式是啥? [复制]

Hive:将字符串转换为布尔值

Knex.js 和 MySQL:将整数转换为布尔值以进行批量选择

javascript的布尔运算符