返回的布尔值转换为布尔值
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 === 0
和 current > len
都是布尔类型,因此通常用于将值转换为纯布尔类型的 !!
在这里没有任何价值,因为 Boolean || Boolean
已经返回一个布尔值。
但是,虽然有问题的代码是错误的或不必要的(在我看来是错误的),但这并不意味着它在 javascript 中不是一个棘手的部分。
通常你在 Javascript 中想要的只是被强制转换为布尔类型的值,但假设你绝对需要一个布尔值并且你有以下代码:
var result = current || current > 5
如果current === 'foo'
那么result === 'foo'
如果您在代码后面使用result
做某事会怎样
喜欢:
finalResult = result + 1
如果result === 'foo'
则finalResult === 'foo1'
但如果result === false
则finalResult === 1
。
这些时候你只是希望你使用的是静态类型语言。
实际上,您在 Javascript 中需要的只是类型强制,并且只在将字符串与变量连接时才关心这些特殊的事情。
【讨论】:
【参考方案3】:===
返回布尔值,即current === 0
返回布尔值,>
返回布尔值,即current > len
返回布尔值,即current === 0 || current > len
返回布尔值。再次将其转换为布尔值绝对是多余的。
【讨论】:
以上是关于返回的布尔值转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章
将 0 和 1 字符串转换为布尔值的最 Pythonic 方式是啥? [复制]