Каков наилучший способ проверить, является ли один символ пробелом?

Я знаю, как проверить это через регулярное выражение.

Но я не уверен, что это лучший способ, если у меня только один персонаж.

Разве нет лучшего способа (относительно производительности) проверить, является ли это пробелом?

Если я сделаю что-то подобное Я бы пропустил пробелы, как вкладки, я думаю?

if (ch == ' ') { ... } 

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

 /s/.test(ch) 

Имейте в виду, что разные браузеры соответствуют разным символам, например, в Firefox, s эквивалентен ( source )

 [ fnrtvu00A0u2028u2029] 

тогда как в Internet Explorer это должно быть ( источник )

 [ fnrtv] 

Страница MSDN на самом деле забыл пространство;)

Подход regex — это надежный путь. Но вот что я делаю, когда мне лень и я забываю правильный синтаксис регулярных выражений:

 str.trim() === '' ? alert('just whitespace') : alert('not whitespace'); 

Я сослался на набор пробельных символов, сопоставляемых функцией обрезки PHP без стыда (за исключением нулевого байта, я понятия не имею, насколько хорошо браузеры справятся с этим).

 if (' tnrv'.indexOf(ch) {amp}gt; -1) { // ... } 

Для меня это выглядит преждевременной оптимизацией.

это охватывает пробелы, табуляции и новые строки:

 if ((ch == ' ') || (ch == 't') || (ch == 'n')) 

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

если производительность действительно важна, вероятно, лучше рассмотреть более широкую картину, чем отдельные операции, подобные этой …

Хотя это не совсем правильно, я использую это прагматичное и быстрое решение:

 if (ch.charCodeAt(0) {amp}lt;= 32) {... 
 var testWhite = (x) { var white = new RegExp(/^s$/); return white.test(x.charAt(0)); }; 

Эта небольшая функция позволит вам ввести строку переменной длины в качестве аргумента и сообщит «true», если первым символом является пробел, или «false» в противном случае. Вы можете легко поместить любой символ из строки в функцию, используя методы indexOf или charAt. Примеры:

 var str = "Today I wish I were not in Afghanistan."; testWhite(str.charAt(9)); // This would test character "i" and would return false. testWhite(str.charAt(str.indexOf("I")   1)); // This would return true. 

Ответ @jake выше — использование метода trim() — лучший вариант. Если у вас есть один символ ch в виде шестнадцатеричного числа:

 String.fromCharCode(ch).trim() === "" 

вернет true для всех пробельных символов.

К сожалению, сравнение типа {amp}lt;=32 не поймает все пробельные символы. Например; 0xA0 (неразрывный пробел) рассматривается как пробел в Javascript, и все же{amp}gt; 32. Поиск с использованием indexOf() со строкой, такой как "tnrv" будет некорректным по той же причине.

Вот короткий фрагмент JS, который иллюстрирует это: https://repl.it/@saleemsiddiqui/JavascriptStringTrim

 function hasWhiteSpace(s) { return /s/g.test(s); } 

Это будет работать

или вы также можете использовать этот indexOf ():

 function hasWhiteSpace(s) { return s.indexOf(' ') {amp}gt;= 0; } 

как насчет этого: ((1L {amp}lt;{amp}lt; ch) {amp}amp; ((ch — 64) {amp}gt;{amp}gt; 31) {amp}amp; 0x100002600L)! = 0L