0

当我使用 indexOf 时,我无法确定 -1 在 javascript 中是真还是假。

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

为什么最后两行给出真/假?

据我了解,只有 == 允许类型转换,因为(=== 是严格的)

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

4

4 回答 4

6

来自MDN

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

这意味着-1被认为是“真实的”。无论如何,您不应该直接在返回的值上检查“真实性”。具有特定含义,因为您要查找的元素在数组中不存在。因此,明确测试using会更有意义。对于任何阅读代码的人来说,其意图也比强制返回值并根据它做出决定要清楚得多。indexOf-1-1===indexOf

于 2016-01-11T16:12:24.273 回答
0

要检查某些变量转换为布尔值是什么,最好的技巧是对其使用布尔运算符。例如!(negation) 是布尔运算符,它为您提供该值的负数(true反之亦然false)。

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

var booleanValue = !!someVariable;

这就是你的情况:

!!(-1) //returns true

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

于 2016-01-11T16:12:45.163 回答
0

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

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

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

于 2016-01-11T16:12:53.793 回答
0

-1是一个类似trule的值。falseJavaScript 中数字之间唯一类似的值是0. 其他类似false的值是'', NaN, undefined... 我希望我没有错过任何东西。

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

if (someString.indexOf('value') >= -1) {
    //code if someString contains 'value'
}
于 2016-01-11T16:30:04.197 回答