UNPKG

is-arguments

Version:

Is this an arguments object? It's a harder question than you think.

45 lines (37 loc) 1.15 kB
'use strict'; var hasToStringTag = require('has-tostringtag/shams')(); var callBound = require('call-bound'); var $toString = callBound('Object.prototype.toString'); /** @type {import('.')} */ var isStandardArguments = function isArguments(value) { if ( hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value ) { return false; } return $toString(value) === '[object Arguments]'; }; /** @type {import('.')} */ var isLegacyArguments = function isArguments(value) { if (isStandardArguments(value)) { return true; } return value !== null && typeof value === 'object' && 'length' in value && typeof value.length === 'number' && value.length >= 0 && $toString(value) !== '[object Array]' && 'callee' in value && $toString(value.callee) === '[object Function]'; }; var supportsStandardArguments = (function () { return isStandardArguments(arguments); }()); // @ts-expect-error TODO make this not error isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests /** @type {import('.')} */ module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;