У меня есть проверка условия для пустых строк, и она не оценивает пустую строку, как ожидалось.
Я читаю строку по одному символу за раз:
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
Вы уверены, что это пустая строка или в ней есть пробелы " "
?
Ваше выражение работает правильно, если s
равно В самом деле пустой строке. Поэтому можно сделать только вывод, что это не так. Обратите внимание, что Number(s)
, когда s
является строкой, содержащей ноль или более пробелов, возвращает 0
, что является число.
это пустая строка без пробелов
Попробуйте s.charCodeAt(0)
. Он должен вернуть NaN
, если это пустая строка.
@Oram это 13, а не пустая строка: S
Код символа 13 — это «ввод», который в консоли выглядит как пустая строка, но на самом деле это строка с разрывом строки. Итак, где-то вы добавляете разрыв строки.
На самом деле 13 это \r
- возврат каретки. Разрыв строки — это \n
, код которого равен 10. Вы можете использовать s.trim()
, чтобы удалить его и другие пробельные символы.
Выражение Number("")
возвращает 0, то есть число. Поскольку тест s !== ''
, очевидно, возвращает true
, должно быть так, что s
содержит один или несколько пробелов. Они также превращаются в 0
функцией Number()
; то есть Number(" ")
тоже 0
.
Глядя на консоль, кажется, что это пустая строка, а в файле она пустая, в ней не должно быть места. Меня не беспокоит Number(), я не могу понять, почему есть пробел, а если нет, то как передать условие
Это ключ возврата, s.charCodeAt(0) = 13, в консоли он выглядит как пустая строка, поэтому я думаю, что мог бы добавить условие для: s.charCodeAt(0) != 13
@mattiscodings, вы можете сделать это или просто сделать s = s.trim();
перед тестированием, чтобы удалить начальные и конечные пробелы.
это работает, даже если код char 13 является разрывом строки, поэтому я думаю, что он удаляет разрывы строк для
@mattiscodings категория «белое пространство» включает в себя больше, чем просто пробелы; вкладки, новые строки, возможно, какие-то «странные» космические вещи Unicode и т. д.
Что именно показывает
console.info()
?