diff --git a/lodash.js b/lodash.js index 97849857a..1b069ce12 100644 --- a/lodash.js +++ b/lodash.js @@ -3108,14 +3108,15 @@ * @returns {Function} Returns the iteratee. */ function baseIteratee(value) { - var type = typeof value; - if (type == 'function') { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { return value; } if (value == null) { return identity; } - if (type == 'object') { + if (typeof value == 'object') { return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); diff --git a/test/test.js b/test/test.js index 28e5e8a29..f5e535b12 100644 --- a/test/test.js +++ b/test/test.js @@ -5534,7 +5534,7 @@ QUnit.test('should iterate over an object with numeric keys (test in Mobile Safari 8)', function(assert) { assert.expect(1); - // Trigger a Mobile Safari 8 JIT bug. + // Trigger a mobile Safari 8 JIT bug. // See https://github.com/lodash/lodash/issues/799. var counter = 0, object = { '1': 'foo', '8': 'bar', '50': 'baz' }; @@ -10914,10 +10914,10 @@ // See https://code.google.com/p/v8/issues/detail?id=2291. var object = {}; - // 1: Useless comparison statement, this is half the trigger. + // First, have a comparison statement. object == object; - // 2: Initial check with object, this is the other half of the trigger. + // Then perform the check with `object`. _.isObject(object); assert.strictEqual(_.isObject('a'), false);