foop
Version:
interfaces that describe their intentions.
42 lines (39 loc) • 941 B
JavaScript
const spreadableSymbol = require('../symbols/spreadable')
const toBoolean = require('../cast/toBoolean')
// is
const isArguments = require('./arguments')
const isArray = require('./array')
/**
* Checks if `value` is a flattenable `arguments` object or array.
*
* @since 5.0.0-beta.5
* @alias isConcatSpreadable
* @alias isSpreadable
*
* @param {*} value The value to check.
* @return {boolean} Returns `true` if `value` is flattenable, else `false`.
*
* @example
*
* (function() {
* isFlattenable(arguments) //=> true
* })([0, 1, 2])
*
* @example
*
* isFlattenable([[0], [1]])
* //=> true
*
* @example
* const obj = {}
* obj[Symbol.isConcatSpreadable] = true
* isFlattenable(obj)
* //=> true
*
*/
function isFlattenable(value) {
return isArray(value) ||
isArguments(value) ||
toBoolean(spreadableSymbol && value && value[spreadableSymbol])
}
module.exports = isFlattenable