diff --git a/lodash.src.js b/lodash.src.js index ba1890231..de0437e64 100644 --- a/lodash.src.js +++ b/lodash.src.js @@ -3839,8 +3839,11 @@ } else { prereq = type == 'string' && index in object; } - var other = object[index]; - return prereq && (value === value ? value === other : other !== other); + if (prereq) { + var other = object[index]; + return value === value ? value === other : other !== other; + } + return false; } /** diff --git a/test/test.js b/test/test.js index de75388fc..26c611115 100644 --- a/test/test.js +++ b/test/test.js @@ -833,6 +833,18 @@ } }); + test('should return `false` for non-iteratee calls', 4, function() { + if (func) { + strictEqual(func(2, 0, array), false); + strictEqual(func(1, 1.1, array), false); + strictEqual(func(1, 0, { 'length': MAX_SAFE_INTEGER + 1 }), false); + strictEqual(func(1, 'b', object), false); + } + else { + skipTest(4); + } + }); + test('should work with `NaN` values', 2, function() { if (func) { strictEqual(func(NaN, 0, [NaN]), true); @@ -843,15 +855,17 @@ } }); - test('should return `false` for non-iteratee calls', 4, function() { + test('should not error when `index` is an object without a `toString` method', 1, function() { if (func) { - strictEqual(func(2, 0, array), false); - strictEqual(func(1, 1.1, array), false); - strictEqual(func(1, 0, { 'length': MAX_SAFE_INTEGER + 1 }), false); - strictEqual(func(1, 'b', object), false); + try { + var actual = func(1, { 'toString': null }, [1]); + } catch(e) { + var message = e.message; + } + strictEqual(actual, false, message || ''); } else { - skipTest(4); + skipTest(); } }); }());