From c0cbe3532216d6fa61297056f8fb2b95ad618b23 Mon Sep 17 00:00:00 2001 From: Katie Byers Date: Tue, 22 Mar 2022 22:22:47 -0700 Subject: [PATCH] add `isNaN` function --- packages/utils/src/is.ts | 12 ++++++++++++ packages/utils/test/is.test.ts | 26 +++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/packages/utils/src/is.ts b/packages/utils/src/is.ts index 463ddc6881a8..0cd9da0e02f2 100644 --- a/packages/utils/src/is.ts +++ b/packages/utils/src/is.ts @@ -146,6 +146,18 @@ export function isThenable(wat: any): wat is PromiseLike { export function isSyntheticEvent(wat: unknown): boolean { return isPlainObject(wat) && 'nativeEvent' in wat && 'preventDefault' in wat && 'stopPropagation' in wat; } + +/** + * Checks whether given value is NaN + * {@link isNaN}. + * + * @param wat A value to be checked. + * @returns A boolean representing the result. + */ +export function isNaN(wat: unknown): boolean { + return typeof wat === 'number' && wat !== wat; +} + /** * Checks whether given value's type is an instance of provided constructor. * {@link isInstanceOf}. diff --git a/packages/utils/test/is.test.ts b/packages/utils/test/is.test.ts index 5b06b7ad6d82..a8f9984e5c12 100644 --- a/packages/utils/test/is.test.ts +++ b/packages/utils/test/is.test.ts @@ -1,4 +1,13 @@ -import { isDOMError, isDOMException, isError, isErrorEvent, isInstanceOf, isPrimitive, isThenable } from '../src/is'; +import { + isDOMError, + isDOMException, + isError, + isErrorEvent, + isInstanceOf, + isNaN, + isPrimitive, + isThenable, +} from '../src/is'; import { supportsDOMError, supportsDOMException, supportsErrorEvent } from '../src/supports'; import { resolvedSyncPromise } from '../src/syncpromise'; @@ -110,3 +119,18 @@ describe('isInstanceOf()', () => { expect(isInstanceOf(new Error('wat'), undefined)).toEqual(false); }); }); + +describe('isNaN()', () => { + test('should work as advertised', () => { + expect(isNaN(NaN)).toEqual(true); + + expect(isNaN(null)).toEqual(false); + expect(isNaN(true)).toEqual(false); + expect(isNaN('foo')).toEqual(false); + expect(isNaN(42)).toEqual(false); + expect(isNaN({})).toEqual(false); + expect(isNaN([])).toEqual(false); + expect(isNaN(new Error('foo'))).toEqual(false); + expect(isNaN(new Date())).toEqual(false); + }); +});