在if-statment中对数组使用indexOf的结果不一致

Mos*_*rge 0 javascript arrays indexof node.js

我正在学习节点.下面的代码给出了不一致的结果,即,如果我给出argv1.indexOf('test'),那么代码无法找到文本,但是,有时候它返回true.为什么会如此.

function process(argv1) {
    if(argv1.indexOf('test')) {
        console.log('Text is available in array.');
    }
}
process(['test','one','help', 'one', 'two']);
Run Code Online (Sandbox Code Playgroud)

vol*_*er9 5

那是因为indexOf返回匹配元素的索引.如果找不到元素,它将返回-1.

你需要的是改变条件:

function process(argv1) {
    if(argv1.indexOf('test') !== -1) {
        console.log('Text is available in array.');
    }
}
process(['test','one','help', 'one', 'two']);
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Havvy指出的那样test,.indexOf将返回0哪个将被转换为false.对于其他数组元素,它们的索引将被转换为true,因为任何非零数字都将被转换为true.有关javascript评估的更多信息,请参阅此处.

  • 此外,`if`会将结果强制转换为布尔值.值"0"被转换为"false",所以`['test','foo',bar'] .indexOf('test')`求值为'0`,`if(0){}`求值为假,不执行你的块. (2认同)