在javascript中是-1真或假?

时间:2016-01-11 16:08:46

标签: javascript boolean truthiness

当我使用indexOf时,我无法弄清楚javascript中-1是真还是假。

let a =  'abc'.indexOf('abc');  
let b =  'def'.indexOf('abc');   

console.log(a);     // 0
console.log(b);     // -1
console.log(!a);    // true
console.log(!b);    // false

为什么最后两行给出true / false?

据我所知,==允许进行类型转换,因为(===是严格的)

(!a)和(!b)在某处内部使用(==)吗?

4 个答案:

答案 0 :(得分:3)

来自MDN

  

在JavaScript中,truthy值是在布尔上下文中求值时转换为true的值。 所有值都是真实的,除非它们被定义为假(即,除了false,0,"",null,undefined和NaN)。(强调我的)

这意味着-1被视为" truthy"。你不应该检查"真实性"无论如何,直接indexOf返回的值。 -1具有特定的含义,因为您要查找的元素在数组中不存在。因此,使用-1===进行明确测试会更有意义。对于阅读代码的任何人来说,意图也比强制indexOf的返回值并基于此做出决定更清晰。

答案 1 :(得分:0)

要检查某些变量转换为布尔值是什么,最好的方法是使用布尔运算符。例如!(否定)是布尔运算符,它为您提供该值的负数(truefalse,反之亦然)。

这些知识在Javascript(以及PHP和Python)中使用如下:

var booleanValue = !!someVariable;

那是你的情况:

!!(-1) //returns true

所以是的,-1将通过隐式javascript转换转换为true。

答案 2 :(得分:0)

在javascript中,只有“0”为假。当使用前面的“!”进行调用时,javascript会将所有内容都转换为boolean。 另一个有趣的事实:

console.log(!!!a);    // false
console.log(!!!b);    // true

从而将你的“a”转换为布尔值!!并获得反向值

答案 3 :(得分:0)

-1是一个类似trule的值。 JavaScript中数字之间唯一的false类似值是0。其他false - 类似的值为''NaNundefined ...我希望我没有错过任何内容。

使用indexOf时,您需要做的只是

if (someString.indexOf('value') >= -1) {
    //code if someString contains 'value'
}