Hoe schrijf je isNumber() in JavaScript?

Mijn gok zou zijn:

function isNumber(val) {
    return val === +val;
}

Is er een betere manier?

Vorige referentie

Decimaal getal valideren in JavaScript – IsNumeric()


Antwoord 1, autoriteit 100%

var isNumber = function isNumber(value) 
{
   return typeof value === 'number' && isFinite(value);
}

Deze code hierboven is afkomstig uit het boek “JavaScript – the good parts”.

/* ANTWOORD UPDATE BEGIN – in antwoord op enkele opmerkingen
hieronder van de persoon die de vraag heeft gesteld en anderen */

var isNumber = function isNumber(value) {
  return typeof value === 'number' && isFinite(value);
}
var isNumberObject = function isNumberObject(n) {
  return (Object.prototype.toString.apply(n) === '[object Number]');
}
var isCustomNumber = function isCustomNumber(n){
  return isNumber(n) || isNumberObject(n);
}
console.log(isCustomNumber(new Number(5)));
console.log(isCustomNumber(new Number(5.2)));
console.log(isCustomNumber(new Number(5.5)));
console.log(isCustomNumber(new Number(-1)));
console.log(isCustomNumber(new Number(-1.5)));
console.log(isCustomNumber(new Number(-0.0)));
console.log(isCustomNumber(new Number(0.0)));
console.log(isCustomNumber(new Number(0)));
console.log(isCustomNumber(new Number(1e5)));
console.log(isCustomNumber(5));
console.log(isCustomNumber(5.2));
console.log(isCustomNumber(5.5));
console.log(isCustomNumber(-1));
console.log(isCustomNumber(-1.5));
console.log(isCustomNumber(-0.0));
console.log(isCustomNumber(0.0));
console.log(isCustomNumber(0));
console.log(isCustomNumber(1e5));

Antwoord 2, autoriteit 47%

Als u geen strings wilt opnemen, en u wilt wel Infinity,
je kunt de getalsdwang van het argument vergelijken met het argument:

function isNumber(n){
    return Number(n)=== n;
}

//test

[0, 1, 2, -1, 1.345e+17, Infinity, false, true, NaN, '1', '0'].map(function(itm){
    return itm+'= '+isNumber(itm);
});
// returned values
0= true
1= true
2= true
-1= true
134500000000000000= true
Infinity= true
false= false
true= false
NaN= false
'1'= false
'0'= false

Antwoord 3, autoriteit 27%

function isNumber(val){
    return typeof val==='number';
}

Antwoord 4, autoriteit 20%

function isNumber(val) {
        // negative or positive
        return /^[-]?\d+$/.test(val);
    }

Antwoord 5, autoriteit 13%

Als je wilt dat "23"een getal is, dan

function isNumber(val) {
    return !isNaN(val);
}

Antwoord 6

Ik vind deze oplossing leuk:

function isNumber(val) {
    return (val >=0 || val < 0);
}

Other episodes