Проверка пустой строки оценивается неправильно

У меня есть проверка условия для пустых строк, и она не оценивает пустую строку, как ожидалось.

Я читаю строку по одному символу за раз:

isNumber(s: string) {
  console.info('char', s);
  if (s !== '' && !isNaN(Number(s))) {
    console.info('is a number');
    console.info('-------------');
    return true;
  }
  console.info('NOT a number');
  console.info('-------------');
}

Строка читается из файла csv:

a,b,
c,d,e

3-й столбец 1-й строки пуст, но если он оценивается как true, даже если у меня есть s !== '', я подтвердил, что char пуст с помощью консоли. Почему условие пустой строки не работает?

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

cellExtraction = '';
cellExtraction += s; // <- where s should be an empty string read from file

Что именно показывает console.info()?

Pointy 29.05.2019 13:45

Вы уверены, что это пустая строка или в ней есть пробелы " "?

adiga 29.05.2019 13:46

Ваше выражение работает правильно, если s равно В самом деле пустой строке. Поэтому можно сделать только вывод, что это не так. Обратите внимание, что Number(s), когда s является строкой, содержащей ноль или более пробелов, возвращает 0, что является число.

Pointy 29.05.2019 13:46

это пустая строка без пробелов

matt 29.05.2019 13:49

Попробуйте s.charCodeAt(0). Он должен вернуть NaN, если это пустая строка.

Oram 29.05.2019 13:51

@Oram это 13, а не пустая строка: S

matt 29.05.2019 13:57

Код символа 13 — это «ввод», который в консоли выглядит как пустая строка, но на самом деле это строка с разрывом строки. Итак, где-то вы добавляете разрыв строки.

Yannick K 29.05.2019 14:17

На самом деле 13 это \r - возврат каретки. Разрыв строки — это \n, код которого равен 10. Вы можете использовать s.trim(), чтобы удалить его и другие пробельные символы.

Oram 29.05.2019 15:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Выражение Number("") возвращает 0, то есть число. Поскольку тест s !== '', очевидно, возвращает true, должно быть так, что s содержит один или несколько пробелов. Они также превращаются в 0 функцией Number(); то есть Number(" ") тоже 0.

Глядя на консоль, кажется, что это пустая строка, а в файле она пустая, в ней не должно быть места. Меня не беспокоит Number(), я не могу понять, почему есть пробел, а если нет, то как передать условие

matt 29.05.2019 13:55

Это ключ возврата, s.charCodeAt(0) = 13, в консоли он выглядит как пустая строка, поэтому я думаю, что мог бы добавить условие для: s.charCodeAt(0) != 13

matt 29.05.2019 14:03

@mattiscodings, вы можете сделать это или просто сделать s = s.trim(); перед тестированием, чтобы удалить начальные и конечные пробелы.

Pointy 29.05.2019 14:38

это работает, даже если код char 13 является разрывом строки, поэтому я думаю, что он удаляет разрывы строк для

matt 29.05.2019 14:48

@mattiscodings категория «белое пространство» включает в себя больше, чем просто пробелы; вкладки, новые строки, возможно, какие-то «странные» космические вещи Unicode и т. д.

Pointy 29.05.2019 14:48

Другие вопросы по теме