Вопрос "содержит ли переменная число?" можно трактовать по-разному:
1. тип переменной Number? - пример: 1
2. если смотреть человеческими глазами, то это число? пример: '1'
3. содержит ли (буквально содержит) число? пример: '1w'
Фокус с плюсиком используется часто, но это в ряде случаев дает ложный результат: c = +'1';
При ограничении, что мы имеем дело с целыми числами, я использую проверку: (parseInt(x) == x)
var x = 1; // a=1 r1=true/b=1 r2=number
var x = '1'; // a=1 r1=true/b=1 r2=number
var x = 0; // a=0 r1=true/b=0 r2=number
var x = '0'; // a=0 r1=true/b=0 r2=number
var x = ''; // a=NaN r1=false/b=0 r2=number
var x; // a=NaN r1=false/b=0 r2=number! (x === undefined)
var x = null; // a=NaN r1=false/b=0 r2=number!
var x = '1w'; // a=1 r1=false/b=NaN r2=number! --- этот вариант можно трактовать по-разному...
var a = parseInt(x)
var b = +x;
var r1 = (a == x);
var r2 = typeof b;
alert('a=' + a + ' r1=' + r1 + '/b=' + b + ' r2=' + r2);
В примерах с 5 по 8 плюсование всегда сообщает о number, хотя в переменной не число.