index.js
1 /*! 2 * has-values <https://github.com/jonschlinkert/has-values> 3 * 4 * Copyright (c) 2014-2015, 2017, Jon Schlinkert. 5 * Released under the MIT License. 6 */ 7 8 'use strict'; 9 10 var typeOf = require('kind-of'); 11 var isNumber = require('is-number'); 12 13 module.exports = function hasValue(val) { 14 // is-number checks for NaN and other edge cases 15 if (isNumber(val)) { 16 return true; 17 } 18 19 switch (typeOf(val)) { 20 case 'null': 21 case 'boolean': 22 case 'function': 23 return true; 24 case 'string': 25 case 'arguments': 26 return val.length !== 0; 27 case 'error': 28 return val.message !== ''; 29 case 'array': 30 var len = val.length; 31 if (len === 0) { 32 return false; 33 } 34 for (var i = 0; i < len; i++) { 35 if (hasValue(val[i])) { 36 return true; 37 } 38 } 39 return false; 40 case 'file': 41 case 'map': 42 case 'set': 43 return val.size !== 0; 44 case 'object': 45 var keys = Object.keys(val); 46 if (keys.length === 0) { 47 return false; 48 } 49 for (var i = 0; i < keys.length; i++) { 50 var key = keys[i]; 51 if (hasValue(val[key])) { 52 return true; 53 } 54 } 55 return false; 56 default: { 57 return false; 58 } 59 } 60 };