Какое значение имеет подстрока, если она не существует?

#javascript #substring

Вопрос:

У меня есть веревочка, msg . Я хочу проверить, существует ли третий символ в строке или нет.
Я пробовал if (msg.substring(3, 4) == undefined) { ... } , но это не работает. Чему была бы равна подстрока, если бы она не существовала?

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

1. Вы пробовали msg.length >= 3 ?

2. На это отвечает документация

3. @RayToal Я попробую это сейчас

4. @Amy Извините, я пытался просмотреть документацию, но не знал, как это сформулировать

5. @RayToal большое спасибо! пожалуйста, не могли бы вы указать это в ответе, чтобы я мог отметить вопрос как ответ?

Ответ №1:

Третий символ строки существует, если строка содержит три символа, поэтому проверка, которую вы ищете,

 msg.length >= 3
 

Что касается вашего вопроса о несуществующей подстроке, вы получаете пустую строку, которую вы можете проверить в консоли:

 > "dog".substring(8, 13)
''
 

Вообще стоит упомянуть, что индексирование и определение длины символов чревато трудностями, связанными с Юникодом, потому что то, что JavaScript считает символом, на самом деле не символ, а код символов UTF-16. Так что следите за:

 > "😬🤔".length
4
> "😬🤔"[1]
'�'
> "😬🤔"[2]
'�'
> [..."😬🤔"][1]
'🤔'
 

Так что, если вы ищете лучших персонажей, сделайте это:

 [...msg].length >= 3
 

Это все равно не будет работать с кластерами графем Юникода, но это, по крайней мере, лучше, чем принимать фактическую длину строки, которая нарушена в JavaScript (если вы не имеете дело с тем, что они называют символами BMP).

Ответ №2:

Из документации:

 Any argument value that is less than 0 or greater than stringName.length is treated as if it were 0 and stringName.length, respectively.
 

Это не очень интуитивно понятно, но ваш пример будет пустой строкой "" (или, если в первой позиции есть символ, и вы добавили больший пробел, это будет строка, которая короче, чем расстояние между indexStart и indexEnd:

 const str = 'hi';
console.log(str.substring(1, 4)); // is "i"
 

Ответ №3:

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

 const
    string0 = '',
    string1 = 'a',
    string2 = 'ab',
    string3 = 'abc',
    string4 = 'abcd';

console.log(string0[2]); // undefined
console.log(string1[2]); // undefined
console.log(string2[2]); // undefined
console.log(string3[2]); // c
console.log(string4[2]); // c 

Ответ №4:

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

 if ( msg[2] !== undefined ) {}
 

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

1. Пожалуйста, постарайтесь избегать ответов только на код, даже если вопрос может быть простым. «Попробуйте это», с добавлением некоторого кода, в конце концов, не является хорошим способом объяснить/понять что-то.

2. Я надеюсь, что сейчас лучше 🙂