Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.04.2021, 10:25
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Определить из строки число / ноль / строку
Здравствуйте!
Подскажите, как правильно определить из строки число. Вот для примера у меня три переменных. Изначально все они являются строками:
let a = '5';
let b = 'qwerty';
let c = '0'; // ноль

Мне нужно '0' и '5' определить как числа.

Как правильно делать проверку?
if (a ) { // ?????
    let z = Number(a);
} else {
    let z = a;
}


У меня есть свои решения которые мне не очень нравятся, поэтому я прошу подсказки решения у более опытных людей.
Ответить с цитированием
  #2 (permalink)  
Старый 02.04.2021, 10:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

MC-XOBAHCK,
if(a == +a)
if(typeof +a === 'number')

Последний раз редактировалось рони, 02.04.2021 в 10:48.
Ответить с цитированием
  #3 (permalink)  
Старый 02.04.2021, 10:47
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

рони, спасибо! Реально круто. А я такую чушь писал...
Подскажите, а с нолём этот фокус правильно отработает? Мне нужно ноль загонять как число.
Ответить с цитированием
  #4 (permalink)  
Старый 02.04.2021, 11:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от MC-XOBAHCK
а с нолём
а проверить самостоятельно?
let a = '000001', b = '0';
alert([+a == a, typeof +a === 'number',+b == b, typeof +b === 'number'] );
Ответить с цитированием
  #5 (permalink)  
Старый 02.04.2021, 12:10
Аватар для MC-XOBAHCK
Профессор
Отправить личное сообщение для MC-XOBAHCK Посмотреть профиль Найти все сообщения от MC-XOBAHCK
 
Регистрация: 06.08.2017
Сообщений: 473

Я проверяю. Но в js ведь есть много разных ньюансов и странных поведений. Вы же вот не зря значение 000001 показали. В +a == a оно дало true. Поэтому я спрашиваю у опытных людей.

Вон и в учебнике чуть ли не на каждой странице есть раздел с особенностями в поведении.
Ответить с цитированием
  #6 (permalink)  
Старый 02.04.2021, 12:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

const isnum = (n )=> !isNaN(n - parseFloat(n))

alert([isnum('0'), isnum(''), isnum('0.0000000001')])
Ответить с цитированием
  #7 (permalink)  
Старый 02.04.2021, 12:48
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

voraa, круто, а я когда-то такую хрень писал:

export function isNumber(value) {
    if (typeof value === 'symbol') {
        return false;
    }

    const val = '' + value;

    return !isNaN(parseFloat(val)) && val.replace(/[^\d.]+?/gim, '').length === val.length;
}
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2021, 16:11
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

voraa,
а зачем n - parseFloat(n) ?
убрав (n - ) мы будем работь с BigInt
и здесь пишут, чтобы применяли isFinite для бесконечностей
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт не работает на добавленные строки Гробовщик jQuery 2 20.02.2015 13:18
Вставить пустую строку после каждой пятой строки each oklidog jQuery 3 03.05.2014 19:52
скрипт бегущей строки - как сделать строку непрерывной dansury Элементы интерфейса 9 26.01.2013 04:54
как преобразовать число 255 в строку "FF" ? kkv Общие вопросы Javascript 6 06.07.2012 03:25
Как обрезать строку и добавить символы в середине, в зависимости от длинны строки andreyua Firefox/Mozilla 12 10.12.2010 15:44