time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

_isKey.js (880B)


      1 var isArray = require('./isArray'),
      2     isSymbol = require('./isSymbol');
      3 
      4 /** Used to match property names within property paths. */
      5 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      6     reIsPlainProp = /^\w*$/;
      7 
      8 /**
      9  * Checks if `value` is a property name and not a property path.
     10  *
     11  * @private
     12  * @param {*} value The value to check.
     13  * @param {Object} [object] The object to query keys on.
     14  * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     15  */
     16 function isKey(value, object) {
     17   if (isArray(value)) {
     18     return false;
     19   }
     20   var type = typeof value;
     21   if (type == 'number' || type == 'symbol' || type == 'boolean' ||
     22       value == null || isSymbol(value)) {
     23     return true;
     24   }
     25   return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
     26     (object != null && value in Object(object));
     27 }
     28 
     29 module.exports = isKey;