#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. Я надеюсь, что сейчас лучше 🙂