You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							1.8 KiB
						
					
					
				| 'use strict';
 | |
| 
 | |
| /**
 | |
|  * High performance assign before node6
 | |
|  * @param {Object} target - target object
 | |
|  * @param {Object | Array} objects - object assign from
 | |
|  * @return {Object} - return target object
 | |
|  */
 | |
| exports.assign = function(target, objects) {
 | |
|   if (!Array.isArray(objects)) {
 | |
|     objects = [ objects ];
 | |
|   }
 | |
| 
 | |
|   for (var i = 0; i < objects.length; i++) {
 | |
|     var obj = objects[i];
 | |
|     if (obj) {
 | |
|       var keys = Object.keys(obj);
 | |
|       for (var j = 0; j < keys.length; j++) {
 | |
|         var key = keys[j];
 | |
|         target[key] = obj[key];
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return target;
 | |
| };
 | |
| 
 | |
| exports.has = function has(obj, prop) {
 | |
|   return Object.prototype.hasOwnProperty.call(obj, prop);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Get all enumerable and ownership of property names
 | |
|  * @param {Object} obj - detect object
 | |
|  * @param {Boolean} [ignoreNull] - ignore null, undefined or NaN property
 | |
|  * @return {Array<String>} property names
 | |
|  */
 | |
| exports.getOwnEnumerables = function getOwnEnumerables(obj, ignoreNull) {
 | |
|   if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
 | |
|     return [];
 | |
|   }
 | |
|   return Object.keys(obj).filter(function(key) {
 | |
|     if (ignoreNull) {
 | |
|       var value = obj[key];
 | |
|       if (value === null || value === undefined || Number.isNaN(value)) {
 | |
|         return false;
 | |
|       }
 | |
|     }
 | |
|     return exports.has(obj, key);
 | |
|   });
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * generate a real map object(clean object), no constructor, no __proto__
 | |
|  * @param {Object} [obj] - init object, optional
 | |
|  * @return {Object}
 | |
|  */
 | |
| exports.map = function map(obj) {
 | |
|   var map = new EmptyObject();
 | |
|   if (!obj) {
 | |
|     return map;
 | |
|   }
 | |
| 
 | |
|   for (var key in obj) {
 | |
|     map[key] = obj[key];
 | |
|   }
 | |
|   return map;
 | |
| };
 | |
| 
 | |
| // faster way like `Object.create(null)` to get a 'clean' empty object
 | |
| // https://github.com/nodejs/node/blob/master/lib/events.js#L5
 | |
| // https://cnodejs.org/topic/571e0c445a26c4a841ecbcf1
 | |
| function EmptyObject() {}
 | |
| EmptyObject.prototype = Object.create(null);
 |