foop
Version:
interfaces that describe their intentions.
57 lines (55 loc) • 5.06 kB
JavaScript
var matchDeepProp = require('../regexp/matchDeepProp')
var matchPlainProp = require('../regexp/matchPlainProp')
var isSymbol = require('./symbol')
var isPrimitive = require('./primitive')
var isArray = require('./array')
var hasIn = require('./hasIn')
/**
* @desc Checks if `value` is a valid PROPERTY/KEY
* @since 5.0.0-beta.7
* @memberOf is
*
* @param {*} value The value to check.
* @param {Object} [obj] The object to query keys on.
* @return {boolean} Returns `true` if `value` is a property name, else `false`.
*
* @name isValidPropertyKey
* @alias isProp
* @alias isValidProp
* @alias isKey
* @alias isValidKey
* @alias isValidPropKey
*
* {@link https://tc39.github.io/ecma262/#sec-ispropertykey emca-ispropertykey}
* {@link https://github.com/lodash/lodash/blob/master/.internal/isKey.js lodash-iskey}
* @see {@link emca-ispropertykey}
* @see {@link lodash-iskey}
*
* @example
*
* isValidPropertyKey(100) //=> true
* isValidPropertyKey('100') //=> true
* isValidPropertyKey('100.1') //=> true
* isValidPropertyKey('ehoh') //=> true
* isValidPropertyKey(Symbol('eh')) //=> true
* isValidPropertyKey(null) //=> true
*
* // try in browser
* // var obj = {}
* // obj[new Array(10)] = []
* isValidPropertyKey([]) //=> false
* isValidPropertyKey('deep.prop') //=> false
*
*/
module.exports = function isValidPropertyKey(x, obj) {
if (isPrimitive(x) || isSymbol(x)) {
return true
}
else if (isArray(x)) {
return false
}
else {
return matchPlainProp.test(x) || !matchDeepProp.test(x) || hasIn(obj, x)
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRQcm9wZXJ0eUtleS5qcyIsInNvdXJjZXMiOlsidmFsaWRQcm9wZXJ0eUtleS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBtYXRjaERlZXBQcm9wID0gcmVxdWlyZSgnLi4vcmVnZXhwL21hdGNoRGVlcFByb3AnKVxuY29uc3QgbWF0Y2hQbGFpblByb3AgPSByZXF1aXJlKCcuLi9yZWdleHAvbWF0Y2hQbGFpblByb3AnKVxuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCcuL3N5bWJvbCcpXG5jb25zdCBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vcHJpbWl0aXZlJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuL2FycmF5JylcbmNvbnN0IGhhc0luID0gcmVxdWlyZSgnLi9oYXNJbicpXG5cbi8qKlxuICogQGRlc2MgQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBQUk9QRVJUWS9LRVlcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjdcbiAqIEBtZW1iZXJPZiBpc1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmpdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKlxuICogQG5hbWUgaXNWYWxpZFByb3BlcnR5S2V5XG4gKiBAYWxpYXMgaXNQcm9wXG4gKiBAYWxpYXMgaXNWYWxpZFByb3BcbiAqIEBhbGlhcyBpc0tleVxuICogQGFsaWFzIGlzVmFsaWRLZXlcbiAqIEBhbGlhcyBpc1ZhbGlkUHJvcEtleVxuICpcbiAqIHtAbGluayBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1pc3Byb3BlcnR5a2V5IGVtY2EtaXNwcm9wZXJ0eWtleX1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvaXNLZXkuanMgbG9kYXNoLWlza2V5fVxuICogQHNlZSB7QGxpbmsgZW1jYS1pc3Byb3BlcnR5a2V5fVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWlza2V5fVxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KDEwMCkgICAgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KCcxMDAnKSAgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KCcxMDAuMScpICAgICAgIC8vPT4gdHJ1ZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KCdlaG9oJykgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KFN5bWJvbCgnZWgnKSkgIC8vPT4gdHJ1ZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KG51bGwpICAgICAgICAgIC8vPT4gdHJ1ZVxuICpcbiAqICAgIC8vIHRyeSBpbiBicm93c2VyXG4gKiAgICAvLyB2YXIgb2JqID0ge31cbiAqICAgIC8vIG9ialtuZXcgQXJyYXkoMTApXSA9IFtdXG4gKiAgICBpc1ZhbGlkUHJvcGVydHlLZXkoW10pICAgICAgICAgICAgLy89PiBmYWxzZVxuICogICAgaXNWYWxpZFByb3BlcnR5S2V5KCdkZWVwLnByb3AnKSAgIC8vPT4gZmFsc2VcbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNWYWxpZFByb3BlcnR5S2V5KHgsIG9iaikge1xuICBpZiAoaXNQcmltaXRpdmUoeCkgfHwgaXNTeW1ib2woeCkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGVsc2UgaWYgKGlzQXJyYXkoeCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gbWF0Y2hQbGFpblByb3AudGVzdCh4KSB8fCAhbWF0Y2hEZWVwUHJvcC50ZXN0KHgpIHx8IGhhc0luKG9iaiwgeClcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUM7QUFDeERBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDO0FBQzFEQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDcENBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMxQ0EsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXVDaEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLGtCQUFrQixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7RUFDbkQsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ2pDLE9BQU8sSUFBSTtHQUNaO09BQ0ksSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDbkIsT0FBTyxLQUFLO0dBQ2I7T0FDSTtJQUNILE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7R0FDekU7Q0FDRjsifQ==