foop
Version:
interfaces that describe their intentions.
52 lines (50 loc) • 4.54 kB
JavaScript
var MAX_32_BIT = require('../native/MAX_32_BIT')
var toInt32 = require('../cast/toInt32')
var isStringPrimitive = require('./stringPrimitive')
/**
* This implements "is array index" which the ECMAString spec defines as:
* > A String property name P is an array index if and only if
* > ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal
* > to 2^32−1.
*
* @since 5.0.0-beta.6
* @name isValidArrayIndex
*
* @param {string | number} x value to check
* @return {boolean} x isValidArrayIndex
*
* {@link http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects emca-array-exotic-objects}
* {@link https://github.com/andrewplummer/Sugar/blob/master/lib/common.js#L815 sugar-isarrayindex}
* {@link https://github.com/facebook/immutable-js/blob/master/src/TrieUtils.js#L58 immutablejs-trieutils}
* @see {@link immutablejs-trieutils}
* @see {@link emca-array-exotic-objects}
* @see {@link sugar-isarrayindex}
* @see cast/toInt32
* @see cast/toIndex
* @see is/validIndex
*
*
* @example
*
* isValidArrayIndex(100) //=> true
* isValidArrayIndex('100') //=> true
* isValidArrayIndex('100.1') //=> false
* isValidArrayIndex('eh') //=> false
*
*/
module.exports = function isValidArrayIndex(x) {
// @TODO ensure this is good ternary, could be 1 line if
// or `!isNumberPrimitive`
if (isStringPrimitive(x)) {
if ('' + toInt32(x) !== x || toInt32(x) === MAX_32_BIT) {
return false
}
else {
return true
}
}
else {
return true
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRBcnJheUluZGV4LmpzIiwic291cmNlcyI6WyJ2YWxpZEFycmF5SW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTUFYXzMyX0JJVCA9IHJlcXVpcmUoJy4uL25hdGl2ZS9NQVhfMzJfQklUJylcbmNvbnN0IHRvSW50MzIgPSByZXF1aXJlKCcuLi9jYXN0L3RvSW50MzInKVxuY29uc3QgaXNTdHJpbmdQcmltaXRpdmUgPSByZXF1aXJlKCcuL3N0cmluZ1ByaW1pdGl2ZScpXG5cbi8qKlxuICogVGhpcyBpbXBsZW1lbnRzIFwiaXMgYXJyYXkgaW5kZXhcIiB3aGljaCB0aGUgRUNNQVN0cmluZyBzcGVjIGRlZmluZXMgYXM6XG4gKiA+IEEgU3RyaW5nIHByb3BlcnR5IG5hbWUgUCBpcyBhbiBhcnJheSBpbmRleCBpZiBhbmQgb25seSBpZlxuICogPiBUb1N0cmluZyhUb1VpbnQzMihQKSkgaXMgZXF1YWwgdG8gUCBhbmQgVG9VaW50MzIoUCkgaXMgbm90IGVxdWFsXG4gKiA+IHRvIDJeMzLiiJIxLlxuICpcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjZcbiAqIEBuYW1lIGlzVmFsaWRBcnJheUluZGV4XG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IHggdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHggaXNWYWxpZEFycmF5SW5kZXhcbiAqXG4gKiB7QGxpbmsgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWFycmF5LWV4b3RpYy1vYmplY3RzIGVtY2EtYXJyYXktZXhvdGljLW9iamVjdHN9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld3BsdW1tZXIvU3VnYXIvYmxvYi9tYXN0ZXIvbGliL2NvbW1vbi5qcyNMODE1IHN1Z2FyLWlzYXJyYXlpbmRleH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaW1tdXRhYmxlLWpzL2Jsb2IvbWFzdGVyL3NyYy9UcmllVXRpbHMuanMjTDU4IGltbXV0YWJsZWpzLXRyaWV1dGlsc31cbiAqIEBzZWUge0BsaW5rIGltbXV0YWJsZWpzLXRyaWV1dGlsc31cbiAqIEBzZWUge0BsaW5rIGVtY2EtYXJyYXktZXhvdGljLW9iamVjdHN9XG4gKiBAc2VlIHtAbGluayBzdWdhci1pc2FycmF5aW5kZXh9XG4gKiBAc2VlIGNhc3QvdG9JbnQzMlxuICogQHNlZSBjYXN0L3RvSW5kZXhcbiAqIEBzZWUgaXMvdmFsaWRJbmRleFxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KDEwMCkgICAgICAgICAvLz0+IHRydWVcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KCcxMDAnKSAgICAgICAvLz0+IHRydWVcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KCcxMDAuMScpICAgICAvLz0+IGZhbHNlXG4gKiAgICBpc1ZhbGlkQXJyYXlJbmRleCgnZWgnKSAgICAgICAgLy89PiBmYWxzZVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCh4KSB7XG4gIC8vIEBUT0RPIGVuc3VyZSB0aGlzIGlzIGdvb2QgdGVybmFyeSwgY291bGQgYmUgMSBsaW5lIGlmXG4gIC8vIG9yIGAhaXNOdW1iZXJQcmltaXRpdmVgXG4gIGlmIChpc1N0cmluZ1ByaW1pdGl2ZSh4KSkge1xuICAgIGlmICgnJyArIHRvSW50MzIoeCkgIT09IHggfHwgdG9JbnQzMih4KSA9PT0gTUFYXzMyX0JJVCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7QUFDbERBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzFDQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ3RELE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7OztFQUc3QyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3hCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRTtNQUN0RCxPQUFPLEtBQUs7S0FDYjtTQUNJO01BQ0gsT0FBTyxJQUFJO0tBQ1o7R0FDRjtPQUNJO0lBQ0gsT0FBTyxJQUFJO0dBQ1o7Q0FDRjsifQ==