Обратная косая черта indexOf () возвращает -1 JavaScript - PullRequest
0 голосов
/ 14 февраля 2019

Почему javascript для

'aaaaa\bb'.indexOf('\\')

возвращает

-1?

Я бы ожидал 5, но получаю это.Он действительно не читает обратную косую черту как символ, но читает ее как экранированный символ?

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Как уже было сказано, он интерпретируется управляющим символом анализатором Javascript.Если вы используете синтаксис расширения для создания массива, вы получите \b как один элемент вместо двух элементов \ и b

 str = 'aaaaa\bb';
 console.log([...str]);
0 голосов
/ 14 февраля 2019

Это связано с тем, что \b представляет символ управления возвратом и игнорируется при console.log вашей строке.

const str = '1234\bb';
console.log(str);

Таким образом, в вашей строке нет обратной косой черты, а indexOf возвращает -1.

const str = 'aaaaa\bb';
console.log(str.indexOf('\\'));

Если вы хотите закодировать обратную косую черту, вам придется ее экранировать, используя \:

const str = 'aaaaa\\bb';
console.log(str);
console.log(str.indexOf('\\'));
0 голосов
/ 14 февраля 2019

Обратная косая черта в строке поиска ('aaaaa\bb') исчезает при разборе строковой константы;парсер JavaScript всегда считывает один обратный слеш в строковой константе как escape.Вы должны удвоить его, как в строке, которую вы передаете .indexOf().

В вашем случае \b - это экранирование для управляющего символа возврата.Даже в случае чего-то вроде \q, который не является «специальным» символом, обратная косая черта в основном игнорируется.

...