当我使用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)在某处内部使用(==)吗?
答案 0 :(得分:3)
来自MDN:
在JavaScript中,truthy值是在布尔上下文中求值时转换为true的值。 所有值都是真实的,除非它们被定义为假(即,除了false,0,"",null,undefined和NaN)。(强调我的)
这意味着-1
被视为" truthy"。你不应该检查"真实性"无论如何,直接从indexOf
返回的值。 -1
具有特定的含义,因为您要查找的元素在数组中不存在。因此,使用-1
对===
进行明确测试会更有意义。对于阅读代码的任何人来说,意图也比强制indexOf
的返回值并基于此做出决定更清晰。
答案 1 :(得分:0)
要检查某些变量转换为布尔值是什么,最好的方法是使用布尔运算符。例如!
(否定)是布尔运算符,它为您提供该值的负数(true
,false
,反之亦然)。
这些知识在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
- 类似的值为''
,NaN
,undefined
...我希望我没有错过任何内容。
使用indexOf时,您需要做的只是
if (someString.indexOf('value') >= -1) {
//code if someString contains 'value'
}