在javascript中是-1真还是假?

ror*_*oro -1 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Viv*_*ath 6

来自MDN

在 JavaScript 中,真值是在布尔上下文中计算时转换为真的值。所有值都是真值,除非它们被定义为假(即,假、0、""、空、未定义和 NaN 除外)。(强调我的)

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