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
的文档?