Normalize keys of buffers and typed arrays.

This commit is contained in:
John-David Dalton
2016-10-04 00:23:00 -07:00
parent 3c30100837
commit 15bd64a1b4

View File

@@ -2387,17 +2387,22 @@
* @returns {Array} Returns the array of property names.
*/
function arrayLikeKeys(value, inherited) {
// Safari 9 makes `arguments.length` enumerable in strict mode.
var result = (isArray(value) || isArguments(value))
? baseTimes(value.length, String)
: [];
var length = result.length,
skipIndexes = !!length;
var isArr = isArray(value),
isArg = !isArr && isArguments(value),
isBuff = !isArr && !isArg && isBuffer(value),
isType = !isArr && !isArg && !isBuff && isTypedArray(value),
skipIndexes = isArr || isArg || isBuff || isType,
result = skipIndexes ? baseTimes(value.length, String) : [],
length = result.length;
for (var key in value) {
if ((inherited || hasOwnProperty.call(value, key)) &&
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
!(skipIndexes && (
key == 'length' ||
(isBuff && (key == 'offset' || key == 'parent')) ||
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
isIndex(key, length)
))) {
result.push(key);
}
}