2013-11-19 2 views
1

Я проверяю индекс строки в JAVASCRIPT. и это становится ложным. где, как значение не принадлежит к нему, как показано ниже:indexOf не работает в JavaScript

if(idOfControl.indexOf(idOfButton)) == is giving false for the below values. 

idOfControl = "dlInventory_btnEditComment_0" 
idOfButton = "dlInventory_btnEditComment" 

Но если я бегу idOfControl.replace(idOfButton, ""); Это работает и замена текста.

Любые причины для этого?

+3

IndexOf возвращает индекс строки, если найден в противном случае возвращает -1 – Shadow

+0

Другим вариантом является использование регулярных выражений, как 'управление =/dlInventory_btnEditComment /' а затем 'if (idOfControl.test (control)) {...}' – bgusach

+0

это не 'false', это' falsy'. Это большая разница. –

ответ

5

indexOf также может возвращать 0, в случае, если ваша строка находится в позиции 0. 0 - false. Попробуйте:

if(idOfControl.indexOf(idOfButton) > -1) 

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

+0

Делает смысл .... – Akon

+1

Или '> = 0', что кажется более естественным для меня. – paxdiablo

+2

Или если вы хотите эффективность, 'if (~ idOfControl.indexOf (idOfButton)) {...}'. Однако это труднее читать. Я не использую его в серьезном коде. – bgusach

3

Есть эти три большие возможности:

IndexOf> -1

Результат indexOf может быть 0 означает, что строка была найденный в начале строки. Когда строка не найдена, возвращается значение -1, поэтому:

if (idOfControl.indexOf(idOfButton) > -1) { 
    // Do something 
} 

Что может быть лучше, как написано @paxdiablo прокомментировал:

if (idOfControl.indexOf(idOfButton) >= 0) { 
    // Do something 
} 

с помощью регулярных выражений

Вы можете использовать очень простой регулярное выражение для проверки соответствия.

var idOfControl = "dlInventory_btnEditComment_0" 
var control = /dlInventory_btnEditComment/; 

if (idOfControl.test(control)) { 
    // do something 
} 

Этот подход может быть увеличена, чтобы захватить последний номер вашей строки (если вам это нужно)

var idOfControl = "dlInventory_btnEditComment_0" 
var control = /dlInventory_btnEditComment_(\d+)/; 

var match = control.exec(idOfControl); 

if (match) { 
    alert('the number found is: ' + match[1]); 
} 

Вы можете попробовать его здесь: http://jsfiddle.net/4Z9UC/

через IndexOf в Hacky путь

Это использует побитовый оператор, чтобы вернуть истинное значение, когда позиция !=-1 (В примечании к дополнению 2, -1 внутренне представлен как 111...111, и его инверсия равна 000...000, которая равна 0, то есть значение фальшивости). Это на самом деле более эффективно, чем опция> -1, но ее труднее читать и понимать. (EDIT: это стало настолько популярным, что вы можете сказать, что это стандарт)

if (~idOfControl.indexOf(idOfButton)) { 
    // do something 
}