Этот код:
var t = "test 55";
t.indexOf("5") !== -1
Вывод истина,
Но этот код:
var t = "test 55";
t.indexOf("5") !== -1
Также выведите true,
Как мне сделать так, чтобы он выводил только истинное значение, когда это точно такое же число, вот так:
var t = "test 55";
t.indexOf("5") !== -1
Выход: ложь,
var t = "test 5";
t.indexOf("5") !== -1
Вывод true.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Значение в двойных или одинарных кавычках рассматривается JavaScript как строковый тип. Следовательно, то, что на самом деле делает indexOf, - это поиск подстроки («5») внутри строки («55»).
Я не уверен, почему вы пытаетесь использовать indexOf для сравнения чисел, разве вы не можете просто использовать:
var t = "55";
t == 5 //false
t == "55" // true
t == "5" // false
Обратите внимание, что я использовал ==, а не ===. Использование == преобразует значения в те же типы (в случае t = "55" в строку) и сравнит их.
РЕДАКТИРОВАТЬ
Поскольку op пояснил, что значение t содержит как числа, так и буквы, то для проведения сравнения необходима дополнительная логика.
Вы можете добиться этого с помощью функции:
function compare(number, stringWithNumber) {
// slice string with number to get a string starting with a number
const stringStartingWithNumber = stringWithNumber.slice(stringWithNumber.search(/\d/));
return parseFloat(stringStartingWithNumber) == number; // parseFloat removes the rest of the string and parses found number as float
}
Потом:
compare("5", "55") // false
compare("5", "5") // true
compare("5", "sometext 55") // false
compare("5", "sometext 5") // true
Обратите внимание, что функция сравнивает предоставленное число только с первым числом, которое она находит в аргументе stringWithNumber.
Это был всего лишь пример, фактическое значение t также содержит буквы t1 = "test 5" t2 = "test 55" t3 = "test 5.5"
.indexOf() не подходит для того, что вы хотите. Вы можете использовать .search() (тем более, что исходная версия вашего вопроса имела тег регулярное выражение) .
Вы явно не указали, что должен давать 5.5, поэтому я приведу два выражения: первое, более простое, /\b5\b/ соответствует ему, а второе, более сложное, /(^|[^.])\b5\b(?!\.)/ - нет. Исключение десятичной точки стало асимметричным до и после 5, потому что я отказался от использования утверждения lookbehind, которое поддерживается только с ECMAScript 2018 и далее.
t = ["5", "test 5", "test 55", "test 5.5"]
console.info('with regex '+/\b5\b/)
for (i in t)
console.info(t[i], t[i].search(/\b5\b/) !== -1)
console.info('with regex '+/(^|[^.])\b5\b(?!\.)/)
for (i in t)
console.info(t[i], t[i].search(/(^|[^.])\b5\b(?!\.)/) !== -1)
indexOf получит первый индекс строки или массива, который соответствует заданному входу. Не могли бы вы дать больше контекста по вашему варианту использования. Потому что вы можете использовать строгое равенство для сравнения точных чисел / строк. например. «5» === «5», который вернет истину, но ложь на «55» === «5»