Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Определить из строки число / ноль / строку (https://javascript.ru/forum/misc/82212-opredelit-iz-stroki-chislo-nol-stroku.html)

MC-XOBAHCK 02.04.2021 10:25

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

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

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


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

рони 02.04.2021 10:44

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

MC-XOBAHCK 02.04.2021 10:47

рони, спасибо! Реально круто. А я такую чушь писал...
Подскажите, а с нолём этот фокус правильно отработает? Мне нужно ноль загонять как число.

рони 02.04.2021 11:13

Цитата:

Сообщение от MC-XOBAHCK
а с нолём

а проверить самостоятельно?
let a = '000001', b = '0';
alert([+a == a, typeof +a === 'number',+b == b, typeof +b === 'number'] );

MC-XOBAHCK 02.04.2021 12:10

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

Вон и в учебнике чуть ли не на каждой странице есть раздел с особенностями в поведении.

voraa 02.04.2021 12:24

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

alert([isnum('0'), isnum(''), isnum('0.0000000001')])

Nexus 02.04.2021 12:48

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;
}

Vlasenko Fedor 02.04.2021 16:11

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


Часовой пояс GMT +3, время: 00:02.