import isArray from '../utils/is-array';
import isObject from '../utils/is-object';
import isObjectEmpty from '../utils/is-object-empty';
+import isNumber from '../utils/is-number';
import isDate from '../utils/is-date';
import map from '../utils/map';
import { createInvalid } from './valid';
configFromArray(config);
} else if (typeof(input) === 'object') {
configFromObject(config);
- } else if (typeof(input) === 'number') {
+ } else if (isNumber(input)) {
// from milliseconds
config._d = new Date(input);
} else {
import { Duration, isDuration } from './constructor';
+import isNumber from '../utils/is-number';
import toInt from '../utils/to-int';
import absRound from '../utils/abs-round';
import hasOwnProp from '../utils/has-own-prop';
d : input._days,
M : input._months
};
- } else if (typeof input === 'number') {
+ } else if (isNumber(input)) {
duration = {};
if (key) {
duration[key] = input;
+import isNumber from '../utils/is-number';
import { getLocale } from './locales';
import { createUTC } from '../create/utc';
}
function listMonthsImpl (format, index, field) {
- if (typeof format === 'number') {
+ if (isNumber(format)) {
index = format;
format = undefined;
}
// (true, fmt)
function listWeekdaysImpl (localeSorted, format, index, field) {
if (typeof localeSorted === 'boolean') {
- if (typeof format === 'number') {
+ if (isNumber(format)) {
index = format;
format = undefined;
}
index = format;
localeSorted = false;
- if (typeof format === 'number') {
+ if (isNumber(format)) {
index = format;
format = undefined;
}
import hasOwnProp from '../utils/has-own-prop';
+import isNumber from '../utils/is-number';
import toInt from '../utils/to-int';
var tokens = {};
if (typeof token === 'string') {
token = [token];
}
- if (typeof callback === 'number') {
+ if (isNumber(callback)) {
func = function (input, array) {
array[callback] = toInt(input);
};
import { MONTH } from './constants';
import toInt from '../utils/to-int';
import isArray from '../utils/is-array';
+import isNumber from '../utils/is-number';
import indexOf from '../utils/index-of';
import { createUTC } from '../create/utc';
import getParsingFlags from '../create/parsing-flags';
} else {
value = mom.localeData().monthsParse(value);
// TODO: Another silent failure?
- if (typeof value !== 'number') {
+ if (!isNumber(value)) {
return mom;
}
}
--- /dev/null
+export default function isNumber(input) {
+ return typeof value === 'number' || Object.prototype.toString.call(input) === '[object Number]';
+}
--- /dev/null
+import { module, test } from '../qunit';
+import isNumber from '../../lib/utils/is-number.js';
+
+
+test('isNumber recognizes numbers', function (assert) {
+ assert.ok(isNumber(1), 'simple integer');
+ assert.ok(isNumber(0), 'simple number');
+ assert.ok(isNumber(-0), 'silly number');
+ assert.ok(isNumber(1010010293029), 'large number');
+ assert.ok(isNumber(Infinity), 'largest number');
+ assert.ok(isNumber(-Infinity), 'smallest number');
+ assert.ok(isNumber(NaN), 'not number');
+ assert.ok(isNumber(1.100393830000), 'decimal numbers');
+ assert.ok(isNumber(Math.LN2), 'natural log of two');
+ assert.ok(isNumber(Math.PI), 'delicious number');
+ assert.ok(isNumber(5e10), 'scientifically notated number');
+ assert.ok(isNumber(new Number(1)), 'number primitive wrapped in an object'); // jshint ignore:line
+});
+
+test('isNumber rejects non-numbers', function (assert) {
+ assert.ok(!isNumber(), 'nothing');
+ assert.ok(!isNumber(undefined), 'undefined');
+ assert.ok(!isNumber(null), 'null');
+ assert.ok(!isNumber([1]), 'array');
+ assert.ok(!isNumber('[1,2,3]'), 'string');
+ assert.ok(!isNumber(new Date()), 'date');
+ assert.ok(!isNumber({a:1,b:2}), 'object');
+});