indexOf() Показывает «-1» при неправильных обстоятельствах

#javascript #indexof

#javascript #indexof

Вопрос:

Я пытаюсь использовать indexOf () для того, чтобы проверить, содержит ли строка другую строку, и если это так, то будут запущены другие операторы if ниже приведен код и зарегистрированные результаты:

   var  str2="Handrail Ext";
  if (fixing.toString().indexOf(str2) === -1 || fixingDig.toString().indexOf(str2) === -1) {
    console.log("$FixingDig: "   fixingDig   " $Fixing: "   fixing   "InfexOf Result: "   fixing.toString().indexOf(str2)   ".");
    $('.results #handrails').val(new_posts);
    $('.wpcf7-form input[name=hidden-post-handrails]').val(new_posts);
  } else {
    console.log("$FixingDig: "   fixingDig   " $Fixing: "   fixing   "InfexOf Result: "   fixing.toString().indexOf(str2)   ".");
    $('.results #handrails').val(0);
    $('.wpcf7-form input[name=hidden-post-handrails]').val("0");
  }
  

Журнал консоли

Загрузка страницы:

 $FixingDig: No Fixing. $Fixing: No Fixing. IndexOf Result: -1.
  

Выбор исправления:

 $FixingDig: Bolt Down (610mm). $Fixing: No Fixing. IndexOf Result: -1.
  

Выбираем исправление с помощью поручня:

 $FixingDig: Bolt Down (760mm   Handrail Ext.). $Fixing: No Fixing. IndexOf Result: -1.
  

Комментарии:

1. Вы можете их видеть, str2 находится над кодом, а строка ввода отображается в логах консоли в вопросе.

2. Я этого не понимаю. Как вы думаете, где ошибка в журнале? Поскольку $Fixing: No Fixing не содержит "Handrail Ext" , следовательно, индекс равен -1. Для меня журнал выглядит правильным. Чего я не понимаю?

3. $ FixingDig: Болт вниз (760 мм поручень внутр.) включает поручень и все равно возвращает -1…

4. Где? Вы не регистрируете это. По крайней мере, я не вижу, где.

5. Я отобразил 3 сообщения журнала консоли и подчеркнул, в какой момент был отображен этот журнал, в нем очень четко написано «Выбор исправления с помощью поручня», затем отображается журнал исправления с выбранным поручнем. В любом случае, теперь это было решено.

Ответ №1:

Для проверки используйте > -1 вместо === -1

 var  str = "Handrail Ext";

var text1 = "bla and bla Handrail Ext bla"
var text2 = "bla and bla Handrail bla"

console.log(text1.indexOf(str))
console.log(text2.indexOf(str))  

Комментарии:

1. Сработало, высоко ценится. Могу принять в качестве ответа в ближайшее время.

Ответ №2:

Ваше условие (fixing.toString().indexOf(str2) === -1 || fixingDig.toString().indexOf(str2) === -1) неверно.

Случай, когда fixing = "No Fixing." и FixingDig = "No Fixing."

 if ("No Fixing.".toString().indexOf("Handrail Ext") === -1 || ...)
//  ^--------------------- True -------------------------^
//  Since the condition is a OR, the remaining isn't evaluated
  

Случай, когда fixing = "Bolt Down (610mm)." и FixingDig = "No Fixing."

 if ("Bolt Down (610mm).".toString().indexOf("Handrail Ext") === -1 || ...)
//  ^--------------------------True -----------------------------^
//  Since the condition is a OR, the remaining isn't evaluated
  

Случай, когда fixing = "Bolt Down (760mm Handrail Ext.)." и FixingDig = "No Fixing."

 if ("Bolt Down (760mm   Handrail Ext.).".toString().indexOf("Handrail Ext") === -1 || "No Fixing.".toString().indexOf("Handrail Ext") === -1)
//  ^----------------------------------- False ----------------------------------^    ^---------------------- True ------------------------^
//  Since the condition is a OR, the remaining IS evaluated. The right part is true, the whole condition is TRUE
  

Замените ваше условие на :

 if (fixing.toString().indexOf(str2) === -1 amp;amp; fixingDig.toString().indexOf(str2) === -1)
//            Notice this -----------------^^
  

Попробуйте сами

 console.log("No Fixing No Fixing");

if ("No Fixing".toString().indexOf("Handrail Ext") === -1 amp;amp; "No Fixing".toString().indexOf("Handrail Ext") === -1) {
    console.log("not found");
  } else {
    console.log("found");
  }
  
console.log("Bolt Down (610mm). No Fixing");
  
if ("Bolt Down (610mm).".toString().indexOf("Handrail Ext") === -1 amp;amp; "No Fixing".toString().indexOf("Handrail Ext") === -1) {
    console.log("not found");
  } else {
    console.log("found");
  }
  
console.log("Bolt Down (760mm   Handrail Ext.). No Fixing");
  
if ("Bolt Down (760mm   Handrail Ext.).".toString().indexOf("Handrail Ext") === -1 amp;amp; "No Fixing".toString().indexOf("Handrail Ext") === -1) {
    console.log("not found");
  } else {
    console.log("found");
  }  

Ответ №3:

Вы могли бы использовать «включает» вместо «indexOf».

Комментарии:

1. Я считаю, что includes выдает ошибку объекта в IE, поскольку изначально она была includes, но мне пришлось изменить ее на indexOf

2. Не включает кроссбраузерность из-за IE