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

时间:2017-08-16 07:49:09

标签: javascript boolean

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

QQuickView

所以有趣的是为什么autor使用!!(//代码),因为我知道!! сonverts值为逻辑真/假,但代码已经返回布尔值(当前=== 0 ||当前> len)//真/假。 请解释或(!!)是不必要的?

3 个答案:

答案 0 :(得分:0)

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

通过双重否定,您将“周期”强制为“this aswertruthy”值

假设您运行此代码

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

这并不意味着

variable.guess === true

答案 1 :(得分:0)

===返回一个布尔值,这意味着current === 0返回一个布尔值,>返回一个布尔值,这意味着current > len返回一个布尔值,这意味着current === 0 || current > len返回一个布尔值。再将它转换为布尔值绝对是多余的。

答案 2 :(得分:-1)

||运算符的行为如下:

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中所需要的只是类型强制,只有在用变量连接字符串时才会关心这些特殊的事情。