continue;
}
}
- } else if (type === 'number' && isFinite(origin) && isFinite(target)) {
+ } else if (helpers.isFinite(origin) && helpers.isFinite(target)) {
view[key] = origin + (target - origin) * ease;
continue;
}
return NaN;
}
// isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values
- if (typeof rawValue === 'number' && !isFinite(rawValue)) {
+ if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {
return NaN;
}
// If it is in fact an object, dive in one more level
return value !== null && Object.prototype.toString.call(value) === '[object Object]';
},
+ /**
+ * Returns true if `value` is a finite number, else returns false
+ * @param {*} value - The value to test.
+ * @returns {Boolean}
+ */
+ isFinite: function(value) {
+ return (typeof value === 'number' || value instanceof Number) && isFinite(value);
+ },
+
/**
* Returns `value` if defined, else returns `defaultValue`.
* @param {*} value - The value to return if defined.
return target;
}
- if (typeof target === 'number' && isFinite(target)) {
+ if (helpers.isFinite(target)) {
horizontal = scale.isHorizontal();
return {
x: horizontal ? target : null,
});
});
+ describe('isFinite', function() {
+ it('should return true if value is a finite number', function() {
+ expect(helpers.isFinite(0)).toBeTruthy();
+ // eslint-disable-next-line no-new-wrappers
+ expect(helpers.isFinite(new Number(10))).toBeTruthy();
+ });
+
+ it('should return false if the value is infinite', function() {
+ expect(helpers.isFinite(Number.POSITIVE_INFINITY)).toBeFalsy();
+ expect(helpers.isFinite(Number.NEGATIVE_INFINITY)).toBeFalsy();
+ });
+
+ it('should return false if the value is not a number', function() {
+ expect(helpers.isFinite('a')).toBeFalsy();
+ expect(helpers.isFinite({})).toBeFalsy();
+ });
+ });
+
describe('isNullOrUndef', function() {
it('should return true if value is null/undefined', function() {
expect(helpers.isNullOrUndef(null)).toBeTruthy();