Sprawdź, czy zmienna jest liczbą lub łańcuchem w JavaScript


Odpowiedzi:


442

Jeśli masz do czynienia z notacją dosłownym, a nie konstruktorów, można użyć typeof .

typeof "Hello World"; // string
typeof 123;           // number

Jeśli tworzysz liczb i ciągów za pomocą konstruktora, takie jak var foo = new String("foo"), należy pamiętać, że typeofmoże wrócić objectdo foo.

Być może bardziej niezawodną metodą sprawdzania typu byłoby użycie metody znalezionej w underscore.js (źródło adnotacji można znaleźć tutaj ),

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

Zwraca wartość logiczną truedla następujących elementów:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true

69
która mówi odpowiednio „ciąg” i „liczba”
Thilo

27
To nie jest poprawne! Istnieją dwie możliwe reprezentacje ciągu. alert (typeof new String ()) wyświetli „Object”. Gorzej, javascript od czasu do czasu będzie konwertować tam iz powrotem między dwiema reprezentacjami za kulisami w celu optymalizacji
George Mauer

3
@George Według PO testowane będą tylko istniejące zmienne.
Sampson

3
Jasne, ale powiedz, że mam funkcję isString (str) {return typeof str === 'string'} niektóre konwertery Java mogą używać mojej metody tak, aby var myString = new String("stuff I like"); isString(myString)zwracała wartość false. Ponadto nie jestem do końca pewien, jak długo trwa konwersja backgroiund, wiem, kiedy nazywam „hi” .length, „hi” zostaje przekształcony w obiekt, nie jestem pewien, jak szybko zostanie ponownie przekonwertowany lub czy jest on kiedykolwiek związany do zmiennej.
George Mauer

8
To prawda, ale czy mimo wszystko chciałbyś użyć obiektu String?
Félix Saparelli

211

Najlepszym sposobem na to jest użycie isNaNrzutowania typu +:

Zaktualizowana metoda all-in:

function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }

To samo za pomocą wyrażenia regularnego:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber('123'); // true  
isNumber('123abc'); // false  
isNumber(5); // true  
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false

21
To wygląda na dobre rozwiązanie, jeśli chcesz liczyć ciągi, które parsowane są jako poprawne liczby.
Trevor Burnham,

2
FYI: nulljest przymuszane do 0 i zwraca wartość true dlaisNumber(null);
Edward

1
co jest nie tak zfunction is_number(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n);}
OneOfOne,

1
Nie udaje się to również w przypadku łańcucha takiego jak „123abc”.
ash

1
@ash Dzięki, zaktualizowałem rozwiązanie, aby objąć również tę sprawę.
BitOfUniverse,

73

Najlepszym sposobem, jaki znalazłem, jest sprawdzenie metody w ciągu znaków, tj .:

if (x.substring) {
// do string thing
} else{
// do other thing
}

lub jeśli chcesz zrobić coś ze sprawdzaniem liczby dla właściwości liczbowej,

if (x.toFixed) {
// do number thing
} else {
// do other thing
}

To jest coś w rodzaju „pisania kaczki”, od ciebie zależy, który sposób ma największy sens. Nie mam wystarczająco dużo karmy, aby komentować, ale typof nie powiedzie się w przypadku ciągów i liczb w pudełku, tj .:

alert(typeof new String('Hello World'));
alert(typeof new Number(5));

ostrzeże „obiekt”.


2
Uważam, że jest to lepsze niż typeofzawsze, ponieważ może zawsze sprawdzać ciąg znaków, zarówno pierwotny, jak i obiekt String. Musisz tylko przetestować metodę, która jest unikalna dla wybranego typu.
ADTC

Z perspektywy kogoś, kto musi utrzymywać kod, wybór tej ścieżki może być mylący. „Dlaczego użyli podciągów i nie przekazali żadnych wartości? Jakiej logiki biznesowej brakuje mi tutaj?” Przynajmniej należy to połączyć z komentarzem wyjaśniającym logikę.
Lemmings19,

3
@ Lemmings19 W rzeczywistości nie wywołuje metody substring, sprawdza tylko, czy x ma metodę substring.
Alokito

1
Podoba mi się pomysł na pisanie kaczek, ale nie powiedzie się to w przypadku takich rzeczy {substring:"hello"}. Wiem, że dla moich celów właśnie przetestowałem, co konkretna operacja muszę zrobić (moduł) dla typu, który musiałem sprawdzić (moduł ciągów zwraca niezdefiniowany), a następnie sprawdziłem to, zamiast uzyskać jego typ.
Tadhg McDonald-Jensen

30

Poszukujesz isNaN():

console.log(!isNaN(123));
console.log(!isNaN(-1.23));
console.log(!isNaN(5-2));
console.log(!isNaN(0));
console.log(!isNaN("0"));
console.log(!isNaN("2"));
console.log(!isNaN("Hello"));
console.log(!isNaN("2005/12/12"));

Zobacz JavaScript isNaN () Funkcja w MDN.


3
Wydaje mi się dziwne, że wybierają odwrotną operację dla nazwy metody. Bardziej intuicyjne wydaje się wywołanie metody isNumber ().
Nathan Taylor,

12
W rzeczywistości nie jest to odwrotna operacja „isNumber”. NaN to specjalna wartość liczby w javascript. isNaN konwertuje wszystko, co zostało mu dostarczone, na liczbę i sprawdza, czy wynikiem jest NaN, czy nie. W przypadku ciągów typu „25” otrzymujesz niepoprawny wynik.
Chetan Sastry

1
Właśnie przetestowałem z „25” i zwróciło fałsz - tak jak bym się spodziewał.
Jakob Gade,

2
NaN jest specjalną wartością w standardzie IEEE 754 dla binarnej arytmetyki zmiennoprzecinkowej, a nie tylko JavaScript. (Cóż,
ściślej mówiąc

2
Pamiętaj, że isNaNzwraca falseza null(ale trueza undefined).
Toni

28

Sprawdź, czy wartość jest literałem ciągu lub obiektem String:

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

Test jednostkowy:

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

Sprawdzanie numeru jest podobne:

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}

1
(o.constructor === String) sam w sobie wydaje się wystarczający, nawet w przypadku literałów łańcuchowych.
Chris Noe,

2
Spowoduje to wyjątek, jeśli o === null
TJ.

3
Podobało mi się to rozwiązanie. Aby jednak uniknąć wyjątku dla przypadku zerowego, użyj o [„konstruktor”] zamiast o.constructor
dreamerkumar

2
@VishalKumar Więc to wszystko jedno potrzeby: function is (type, value) { return value["constructor"] === type; }?
Ceving

22

Od ES2015 poprawnym sposobem sprawdzenia, czy zmienna zawiera prawidłową liczbę, jest Number.isFinite(value)

Przykłady:

Number.isFinite(Infinity)   // false
Number.isFinite(NaN)        // false
Number.isFinite(-Infinity)  // false

Number.isFinite(0)          // true
Number.isFinite(2e64)       // true

Number.isFinite('0')        // false
Number.isFinite(null)       // false

1
To nie obsługuje przeglądarki Internet Explorer. developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
davedeecoder

1
Nie działa na String, który jest pierwotnym pytaniem.
Eric Grange,

18

Spróbuj tego,

<script>
var regInteger = /^-?\d+$/;

function isInteger( str ) {    
    return regInteger.test( str );
}

if(isInteger("1a11")) {
   console.log( 'Integer' );
} else {
   console.log( 'Non Integer' );
}
</script>

spróbuj „-2”. zwraca false.
KChen

1
Dlaczego przechowujesz (lub nie edytujesz) odpowiedź, która nie działa? ... Uwaga: liczba ujemna może być również liczbą całkowitą.
Ason,

13

Najlepszy sposób to zrobić:

function isNumber(num) {
  return (typeof num == 'string' || typeof num == 'number') && !isNaN(num - 0) && num !== '';
};

Spełnia to następujące przypadki testowe:

assertEquals("ISNUMBER-True: 0", true, isNumber(0));
assertEquals("ISNUMBER-True: 1", true, isNumber(-1));
assertEquals("ISNUMBER-True: 2", true, isNumber(-500));
assertEquals("ISNUMBER-True: 3", true, isNumber(15000));
assertEquals("ISNUMBER-True: 4", true, isNumber(0.35));
assertEquals("ISNUMBER-True: 5", true, isNumber(-10.35));
assertEquals("ISNUMBER-True: 6", true, isNumber(2.534e25));
assertEquals("ISNUMBER-True: 7", true, isNumber('2.534e25'));
assertEquals("ISNUMBER-True: 8", true, isNumber('52334'));
assertEquals("ISNUMBER-True: 9", true, isNumber('-234'));

assertEquals("ISNUMBER-False: 0", false, isNumber(NaN));
assertEquals("ISNUMBER-False: 1", false, isNumber({}));
assertEquals("ISNUMBER-False: 2", false, isNumber([]));
assertEquals("ISNUMBER-False: 3", false, isNumber(''));
assertEquals("ISNUMBER-False: 4", false, isNumber('one'));
assertEquals("ISNUMBER-False: 5", false, isNumber(true));
assertEquals("ISNUMBER-False: 6", false, isNumber(false));
assertEquals("ISNUMBER-False: 7", false, isNumber());
assertEquals("ISNUMBER-False: 8", false, isNumber(undefined));
assertEquals("ISNUMBER-False: 9", false, isNumber(null));

13
//testing data types accurately in JavaScript (opposed to "typeof")
//from http://bonsaiden.github.com/JavaScript-Garden/
function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

//basic usage
is('String', 'test'); // true
is('Array', true); // false

Lub dostosuj, aby zwrócić nieznany typ:

function realTypeOf(obj) {
    return Object.prototype.toString.call(obj).slice(8, -1);
}

//usage
realTypeOf(999); // 'Number'

Aktualizacja z 12 maja 2012: Pełny przykład w Javascript: A Better typeof .


Wciąż jest miejsce na ulepszenia, jeśli chodzi o realTypeOf: realTypeOf(NaN) -> "Number"takie samo zachowanie, jak typeofuzgodniono, ale wciąż dalekie od ideału.
Maks.

9

Oto podejście oparte na idei wymuszania wprowadzania danych na liczbę lub ciąg znaków przez dodanie zera lub ciągu zerowego, a następnie wykonanie wpisanego porównania równości.

function is_number(x) { return x === x+0;  }
function is_string(x) { return x === x+""; }

Z jakiegoś niezgłębionego powodu x===x+0wydaje się działać lepiej niż x===+x.

Czy są jakieś przypadki, w których nie udaje się

W tej samej żyle:

function is_boolean(x) { return x === !!x; }

Wydaje się to być nieco szybsze niż którekolwiek x===true || x===falselub typeof x==="boolean"(i znacznie szybsze niż x===Boolean(x)).

Potem jest też

function is_regexp(x)  { return x === RegExp(x); }

Wszystko to zależy od istnienia operacji „tożsamości” specyficznej dla każdego typu, która może być zastosowana do dowolnej wartości i niezawodnie wytworzy wartość danego typu. Nie mogę wymyślić takiej operacji dla dat.

Dla NaN istnieje

function is_nan(x) { return x !== x;}

Jest to w zasadzie wersja podkreślenia, a na obecnym isNaN()etapie jest około czterokrotnie szybsza niż , ale komentarze w źródle podkreślenia wspominają, że „NaN jest jedyną liczbą, która sama się nie równa” i dodaje kontrolę dla _.isNumber. Dlaczego? Jakie inne przedmioty nie byłyby sobie równe? Używa również podkreślenia - x !== +xale jaka to różnica+ tutaj zrobić?

Następnie dla paranoika:

function is_undefined(x) { return x===[][0]; }

albo to

function is_undefined(x) { return x===void(0); }

1
x! == + x pierwsze próby konwersji x na liczbę.
Adrian Bartholomew

8

Czy możesz to po prostu podzielić przez 1?

Zakładam, że problemem byłby ciąg znaków wejściowych takich jak: „123ABG”

var Check = "123ABG"

if(Check == Check / 1)
{
alert("This IS a number \n")
}

else
{
alert("This is NOT a number \n")
}

Właśnie tak zrobiłem ostatnio.


Nie sądzę, żeby chciał, żeby zwrócił prawdę, jeśli to ciąg liczb. Może użyj ===
Curtis,

7

a może po prostu:

function IsString(obj) {
    return obj !== undefined && obj != null && obj.toLowerCase !== undefined;
}

Po dalszej analizie wiele miesięcy później, ta jedyna gwarancja objto obiekt, który ma toLowerCasezdefiniowaną nazwę metody lub właściwości . Wstydzę się swojej odpowiedzi. Zobacz najlepiej głosowany typeof.


7

Lub po prostu użyj odwrócenia isNaN() :

if(!isNaN(data))
  do something with the number
else
  it is a string

I tak, korzystanie z jQuery's $.isNumeric()daje więcej zabawy.


isNaN('123')daje false, chociaż argument jest ciągiem liczbowym, a nie typem liczbowym
JustAMartin

6

Myślę, że konwersja var na ciąg zmniejsza wydajność, przynajmniej ten test przeprowadzony w najnowszych przeglądarkach tak pokazuje.

Więc jeśli zależy Ci na wydajności, skorzystałbym z tego:

typeof str === "string" || str instanceof String

do sprawdzania, czy zmienna jest ciągiem (nawet jeśli używasz var str = new String("foo"),str instanceof String zwróci true).

Jeśli chodzi o sprawdzenie, czy jest to liczba, wybrałbym natywną isNaN:; funkcjonować.



4

To rozwiązanie rozwiązuje wiele podniesionych tutaj problemów!

Jest to zdecydowanie najbardziej niezawodna metoda, z której dotychczas korzystałem. Nie wymyśliłem tego i nie pamiętam, gdzie go pierwotnie znalazłem. Ale działa tam, gdzie zawodzą inne techniki:

// Begin public utility /getVarType/
// Returns 'Function', 'Object', 'Array',
// 'String', 'Number', 'Boolean', or 'Undefined'
getVarType = function ( data ){
  if (undefined === data ){ return 'Undefined'; }
  if (data === null ){ return 'Null'; }
  return {}.toString.call(data).slice(8, -1);
};  
// End public utility /getVarType/

Przykład poprawności

var str = new String();
console.warn( getVarType(str) ); // Reports "String"    
console.warn( typeof str );      // Reports "object"

var num = new Number();
console.warn( getVarType(num) ); // Reports "Number"
console.warn( typeof num );      // Reports "object"

var list = [];
console.warn( getVarType( list ) ); // Reports "Array"
console.warn( typeof list );        // Reports "object"

2
I to jest naprawdę powolne.

Tarazaburo, nie wiem, skąd bierzesz swoje dane, ale trochę testów porównawczych jest w porządku:
Michael Mikowski

Nie uważam tego za „naprawdę powolne”. Testując szybkość ponad 1 milion iteracji, uważam, że nie jest gorsza niż połowa prędkości typeofmetody natywnej (0,788s w porównaniu do 1,481s) w Chrome. Jest to z pewnością akceptowalna wydajność, biorąc pod uwagę lepsze wyniki. Jak myślisz, dlaczego jest „naprawdę wolny”? Może tak jest - w IE6 / 7/8? Ale w tych przeglądarkach wszystko jest „naprawdę wolne”.
Michał Mikowski,

Powiedziałem to, ponieważ przeprowadziłem już testy porównawcze. Złóż nowy mały na jsperf.com/check-typeof-number-again , a typeofjest 100 razy szybszy, czego mi brakuje?

Brakuje Ci faktu, że 3m operacji / s nie stanowi problemu dla większości kodu podczas sprawdzania typu. W żadnym wypadku nie nazwałbym tego „naprawdę wolnym”. Mój test porównawczy wyglądał tak: var i, k, start = + new Date (); dla (i = 0; i <1000000; i ++) {k = typeof („foo”); k = typof (123,5); }; end = + nowa data (); console.log (end - start);
Michał Mikowski,


4

typeof w większości przypadków działa bardzo dobrze. Możesz spróbować użyć instrukcji if

if(typeof x === 'string' || typeof x === 'number') {
    console.log("Your statement");
}

gdzie x to dowolna nazwa zmiennej do wyboru


Co ta odpowiedź dodaje do najbardziej uprzywilejowanych?
Bartek Banachewicz

2
Prostota i przejrzystość?
Tim Erickson,

3

najlepszy sposób, w jaki myślę o liczbach dodatnich i ujemnych, to: O'Reilly Javascript i DHTML Cookbook :

function isNumber(elem) {
var str = elem.value;
var oneDecimal = false;
var oneChar = 0;
// make sure value hasn't cast to a number data type
str = str.toString( );
for (var i = 0; i < str.length; i++) {
    oneChar = str.charAt(i).charCodeAt(0);
    // OK for minus sign as first character
    if (oneChar =  = 45) {
        if (i =  = 0) {
            continue;
        } else {
            alert("Only the first character may be a minus sign.");
            return false;
        }
    }
    // OK for one decimal point
    if (oneChar =  = 46) {
        if (!oneDecimal) {
            oneDecimal = true;
            continue;
        } else {
            alert("Only one decimal is allowed in a number.");
            return false;
        }
    }
    // characters outside of 0 through 9 not OK
    if (oneChar < 48 || oneChar > 57) {
        alert("Enter only numbers into the field.");
        return false;
    }
}
return true;

}


3

Errr? Wystarczy użyć wyrażeń regularnych! :)

function isInteger(val) {
  return val.match(/^[0-9]$/)
}

function isFloat(val) {
  return val.match(/^[0-9]*/\.[0-9]+$/)
}

3

ponieważ ciąg jako „1234” z typof pokaże „ciąg”, a odwrotność nigdy nie może się zdarzyć (typof 123 zawsze będzie liczbą), najlepiej jest użyć prostego wyrażenia regularnego /^\-?\d+$/.test(var). Lub bardziej zaawansowane dopasowanie liczb zmiennoprzecinkowych, liczb całkowitych i liczb ujemnych /^[\-\+]?[\d]+\.?(\d+)?$/ . Ważną stroną .testjest to, że NIE rzuca wyjątku, jeśli var nie jest łańcuchem, wartość może być dowolna.

var val, regex = /^[\-\+]?[\d]+\.?(\d+)?$/;

regex.test(val)       // false 
val = '1234';
regex.test(val)       // true
val = '-213';
regex.test(val)       // true
val = '-213.2312';
regex.test(val)       // true
val = '+213.2312';
regex.test(val)       // true
val = 123;
regex.test(val)       // true
val = new Number(123);
regex.test(val)       // true
val = new String('123');
regex.test(val)       // true
val = '1234e';
regex.test(val)       // false 
val = {};
regex.test(val)       // false 
val = false;
regex.test(val)       // false 
regex.test(undefined) // false 
regex.test(null)      // false 
regex.test(window)    // false 
regex.test(document)  // false 

Jeśli szukasz prawdziwego typu, wystarczy sam typof.


3

@ Odpowiedź BitOfUniverse jest dobra i wymyśliłem nowy sposób:

function isNum(n) {
    return !isNaN(n/0);
}

isNum('')  // false
isNum(2)   // true
isNum('2k') // false
isNum('2')  //true

Wiem, że 0nie może być dywidendy, ale tutaj funkcja działa idealnie.


2

Sprawdzanie typu

Możesz sprawdzić typ zmiennej za pomocą typeofoperatora:

typeof variable

Sprawdzanie wartości

Poniższy kod zwraca true dla liczb i false dla czegokolwiek innego:

!isNaN(+variable);

zmienna var = „123”; console.log (! isNaN (+ zmienna)); daje prawdę, chociaż jest to ciąg, a nie typ
liczbowy

Ponieważ „123” jest liczbą! Jeśli chcesz poznać typ zmiennej, możesz łatwo użyć typeofoperatora! @JustAMartin
Amir Fo

Tak, ale pierwotne pytanie polegało na odróżnieniu zmiennych typu łańcuchowego od zmiennych typu liczby. „123” jest wciąż ciągiem. Jeśli zdam 123, odpowiedź powinna brzmieć, numberale jeśli podam „123”, „abc” lub inny cytowany literał, jest to ciąg znaków i nie ma znaczenia, czy można go parsować na liczbę, czy nie.
JustAMartin

@JustAMartin Ok Zredagowałem moją odpowiedź.
Amir Fo

1

Za pomocą operacji XOR można wykryć liczbę lub ciąg znaków. liczba ^ 0 zawsze będzie podawać liczbę jako wynik, a ciąg ^ 0 da 0 jako wynik.

Example: 
   1)  2 ^ 0 = 2
   2)  '2' ^ 0  = 2
   3)  'Str' ^ 0 = 0

1

Prosty i dokładny:

function isNumber(x) {
  return parseFloat(x) == x
};

Przypadki testowe:

console.log('***TRUE CASES***');
console.log(isNumber(0));
console.log(isNumber(-1));
console.log(isNumber(-500));
console.log(isNumber(15000));
console.log(isNumber(0.35));
console.log(isNumber(-10.35));
console.log(isNumber(2.534e25));
console.log(isNumber('2.534e25'));
console.log(isNumber('52334'));
console.log(isNumber('-234'));
console.log(isNumber(Infinity));
console.log(isNumber(-Infinity));
console.log(isNumber('Infinity'));
console.log(isNumber('-Infinity'));

console.log('***FALSE CASES***');
console.log(isNumber(NaN));
console.log(isNumber({}));
console.log(isNumber([]));
console.log(isNumber(''));
console.log(isNumber('one'));
console.log(isNumber(true));
console.log(isNumber(false));
console.log(isNumber());
console.log(isNumber(undefined));
console.log(isNumber(null));
console.log(isNumber('-234aa'));

0

Po prostu użyj

myVar.constructor == String

lub

myVar.constructor == Number

jeśli chcesz obsługiwać ciągi zdefiniowane jako obiekty lub literały i zapisywać, nie chcesz używać funkcji pomocniczej.


0
function IsNumeric(num) {
    return ((num >=0 || num < 0)&& (parseInt(num)==num) );
}

0

Bardzo późno na imprezę; jednak poniższe elementy zawsze działały dla mnie dobrze, gdy chcę sprawdzić, czy dane wejściowe są ciągiem znaków lub liczbą w jednym ujęciu.

return !!Object.prototype.toString.call(input).match(/\[object (String|Number)\]/);

0

Utworzono jsperf podczas sprawdzania, czy zmienna jest liczbą. Dość ciekawe! typeof faktycznie ma wydajność. Używanie typeofdo czegokolwiek innego niż liczby, ogólnie idzie o 1/3 prędkości jakovariable.constructor ponieważ większość typów danych w javascript to Obiekty; liczby nie są!

http://jsperf.com/jemiloii-fastest-method-to-check-if-type-is-a-number

typeof variable === 'number'| najszybszy | jeśli chcesz numer, na przykład 5, a nie „5”
typeof parseFloat(variable) === 'number' | najszybszy | jeśli chcesz numer, taki jak 5 i „5”

isNaN()jest wolniejszy, ale nie tak dużo wolniejszy. Miałem wielkie nadzieje parseInti parseFloatbyły one jednak strasznie wolniejsze.


0

Do wykrywania liczb istotny jest następujący fragment z JavaScript: Dobre części Douglasa Crockforda:

Funkcja isFinite jest najlepszym sposobem ustalenia, czy wartość może być użyta jako liczba, ponieważ odrzuca NaN i Infinity. Niestety, isFinite spróbuje przekonwertować swój argument na liczbę, więc nie jest dobrym testem, jeśli wartość nie jest w rzeczywistości liczbą. Możesz zdefiniować własną funkcję isNumber:

var isNumber = function isNumber(value) { return typeof value === 'number' &&
            isFinite(value);
};
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.