Ensure _.has returns false for nullish objects. [closes #2190]

This commit is contained in:
John-David Dalton
2016-03-31 15:55:05 -07:00
parent e96ee69f1c
commit 8bd9a4d2c3
2 changed files with 22 additions and 3 deletions

View File

@@ -5353,9 +5353,9 @@
var index = -1, var index = -1,
length = path.length; length = path.length;
while (object != null && ++index < length) { while (++index < length) {
var key = path[index]; var key = path[index];
if (!(result = hasFunc(object, key))) { if (!(result = object != null && hasFunc(object, key))) {
break; break;
} }
object = object[key]; object = object[key];

View File

@@ -7128,13 +7128,17 @@
}); });
QUnit.test('`_.' + methodName + '` should support deep paths', function(assert) { QUnit.test('`_.' + methodName + '` should support deep paths', function(assert) {
assert.expect(2); assert.expect(4);
var object = { 'a': { 'b': { 'c': 3 } } }; var object = { 'a': { 'b': { 'c': 3 } } };
lodashStable.each(['a.b.c', ['a', 'b', 'c']], function(path) { lodashStable.each(['a.b.c', ['a', 'b', 'c']], function(path) {
assert.strictEqual(func(object, path), true); assert.strictEqual(func(object, path), true);
}); });
lodashStable.each(['a.c.b', ['a', 'c', 'b']], function(path) {
assert.strictEqual(func(object, path), false);
});
}); });
QUnit.test('`_.' + methodName + '` should coerce `path` to a string', function(assert) { QUnit.test('`_.' + methodName + '` should coerce `path` to a string', function(assert) {
@@ -7271,6 +7275,21 @@
}); });
}); });
QUnit.test('`_.' + methodName + '` should return `false` when nested `object` is nullish', function(assert) {
assert.expect(2);
var values = [null, undefined],
expected = lodashStable.map(values, alwaysFalse);
lodashStable.each(['a.b.c', ['a', 'b', 'c']], function(path) {
var actual = lodashStable.map(values, function(value) {
return func({ 'a': value }, path);
});
assert.deepEqual(actual, expected);
});
});
QUnit.test('`_.' + methodName + '` should return `false` with deep paths when `object` is nullish', function(assert) { QUnit.test('`_.' + methodName + '` should return `false` with deep paths when `object` is nullish', function(assert) {
assert.expect(2); assert.expect(2);