Ensure _.has treats sparse arrays as dense.

This commit is contained in:
jdalton
2015-05-12 08:44:02 -07:00
parent c6ff845ecb
commit e3be2b4451
2 changed files with 22 additions and 7 deletions

View File

@@ -9715,13 +9715,18 @@
return false;
}
var result = hasOwnProperty.call(object, path);
if (!result && !isKey(path)) {
path = toPath(path);
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
path = last(path);
result = object != null && hasOwnProperty.call(object, path);
if (result) {
return result;
}
return result || (lodash.support.nonEnumStrings && isString(object) && isIndex(path, object.length));
if (isKey(path)) {
var length = object.length;
return isLength(length) &&
(isArray(object) || (support.nonEnumStrings && isString(object)) ||
(support.nonEnumArgs && isArguments(object))) && isIndex(path, length);
}
path = toPath(path);
object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
return object != null && hasOwnProperty.call(object, last(path));
}
/**

View File

@@ -6248,6 +6248,8 @@
QUnit.module('lodash.has');
(function() {
var args = arguments;
test('should check for own properties', 2, function() {
var object = { 'a': 1 };
@@ -6311,6 +6313,14 @@
});
});
test('should treat sparse arrays as dense', 1, function() {
strictEqual(_.has(Array(1), 0), true);
});
test('should work with `arguments` objects', 1, function() {
strictEqual(_.has(args, 1), true);
});
test('should check for a key over a path', 2, function() {
var object = { 'a.b.c': 3, 'a': { 'b': { 'c': 4 } } };
@@ -6352,7 +6362,7 @@
strictEqual(_.has(object, path), false);
});
});
}());
}(1, 2, 3));
/*--------------------------------------------------------------------------*/