import type { PhpRuntimeValue } from '../_helpers/_phpTypes.ts' type NumberCheckValue = PhpRuntimeValue export function is_nan(val: NumberCheckValue): boolean { // discuss at: https://locutus.io/php/is_nan/ // original by: Onno Marsman (https://twitter.com/onnomarsman) // input by: Robin // example 1: is_nan(NaN) // returns 1: true // example 2: is_nan(0) // returns 2: false let warningType = '' if (typeof val === 'number' && isNaN(val)) { return true } // Some errors for maximum PHP compatibility if (typeof val === 'object') { warningType = Array.isArray(val) ? 'array' : 'object' } else if (typeof val === 'string' && !/^[+-]?\d/.test(val)) { // simulate PHP's behaviour: '-9a' doesn't give a warning, but 'a9' does. warningType = 'string' } if (warningType) { throw new Error('Warning: is_nan() expects parameter 1 to be double, ' + warningType + ' given') } return false }