2015-01-07 4 views
0

Так что это похоже на простой вопрос, но следующий код работает, но не так, как я ожидаю. Это пример из онлайн-проверки видео на http в поле. Я знаю, что есть другие вопросы о «правильном» способе использования indexOf, но мой вопрос в том, почему этот код работает.indexOf значение возвращаемого значения

document.ucDivIntake.website.onchange = function(){ 
var theURL = document.ucDivIntake.website.value; 
    if(theURL.indexOf("http")){ 
     document.getElementById('errorMessage_website').innerHTML = "need http"; 
     document.getElementById('errorMessage_website').style('display', 'inline'); 
    } 
} 

Это сообщение об ошибке отображается, если http отсутствует. Если http не найден indexOf, он возвращает -1. Я подтверждаю, что в моем отладчике. Таким образом, это не приведет к условию и не будет вводить код условия. Похоже, что я пропустил что-то основное.

ответ

1

Функция .indexOf() возвращает число, а не логическое. Числовое значение будет больше или равно нулю, а это означает, что если в начале строки поиска появится «http», результат будет 0, и тест завершится с ошибкой.

Ярчайший, что нужно сделать, это сравнить явно:

if (theURL.indexOf("http") > -1) 
+1

так что даже если он получает -1, он является «истинным» и отвечает условию, там условие будет выполнено, если только http не находится в начале строки? Это объясняет результат. Я думал, что -1 будет «ложным». – RGB

+0

@ RGB да точно. Значения «ложь» в JavaScript - это «0», «NaN», «», «null», «undefined» и, конечно, «false». – Pointy

1

indexOf возвращает ноль, если это в начале строки. Поскольку нуль является «ложным», условие if не выполняется.

Оно должно быть:

if(theURL.indexOf("http") >= 0) 
0

в JavaScript, если ([числовое значение]) всегда возвращает истину, если число не 0

если 0 оно ложно.

0

indexOf вернется туда, где строка находится в целевой строке. Если это позиция 0, то это будет оцениваться как «ложное» и, следовательно, терпит неудачу.

Аналогичным образом, если он не существует, он вернет -1 - также является ложным.

Смежные вопросы