Javascript 对if语句中的数组使用indexOf的结果不一致

Javascript 对if语句中的数组使用indexOf的结果不一致,javascript,arrays,node.js,indexof,Javascript,Arrays,Node.js,Indexof,我正在学习节点的过程中。下面的代码给出了不一致的结果,即,如果我给出argv1.indexOf('test'),则代码无法找到文本,但有时返回true。为什么会这样 function process(argv1) { if(argv1.indexOf('test')) { console.log('Text is available in array.'); } } process(['test','one','help', 'one', 'two']); 这是

我正在学习节点的过程中。下面的代码给出了不一致的结果,即,如果我给出
argv1.indexOf('test')
,则代码无法找到文本,但有时返回true。为什么会这样

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

这是因为
indexOf
返回匹配元素的索引。如果未找到元素,它将返回
-1

您需要的是更改条件:

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

Edit:正如@Havvy所指出的,在
test
的情况下,
.indexOf
将返回
0
,该值将被转换为
false
。对于其他数组元素,它们的索引将转换为
true
,因为任何非零数都将转换为
true
。您可以阅读有关javascript评估的更多信息。

这是因为
indexOf
返回匹配元素的索引。如果未找到元素,它将返回
-1

您需要的是更改条件:

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

Edit:正如@Havvy所指出的,在
test
的情况下,
.indexOf
将返回
0
,该值将被转换为
false
。对于其他数组元素,它们的索引将转换为
true
,因为任何非零数都将转换为
true
。关于javascript评估的更多信息,您可以阅读。

此外,
if
将结果类型转换为布尔值。值
0
被类型转换为
false
,因此
['test',foo',bar'].indexOf('test')
计算为
0
,如果(0){}计算为false,则不执行块。当然,如果元素索引大于零,则转换为
true
。此外,
if
将结果类型转换为布尔值。值
0
被类型化为
false
,因此
['test','foo',bar'].indexOf('test')
计算为
0
,如果(0){}计算为false,则不执行块。当然,如果元素索引大于零,它将转换为
true
。在这种情况下,您希望
indexOf
返回什么?您是否费心阅读
indexOf
的文档?在这种情况下,您希望
indexOf
返回什么?您是否费心阅读
indexOf
的文档?