diff --git a/lodash.js b/lodash.js index 04cced0a2..5c67c150e 100644 --- a/lodash.js +++ b/lodash.js @@ -25,8 +25,8 @@ /** * Detect the JScript [[DontEnum]] bug: - * IE < 9 makes an objects own properties, shadowing non-enumerable ones, - * non-enumerable too. + * In IE < 9 an objects own properties, shadowing non-enumerable ones, are + * made non-enumerable as well. */ var hasDontEnumBug = !{ 'valueOf': 0 }.propertyIsEnumerable('valueOf'); @@ -48,7 +48,7 @@ */ var reUnescaped = RegExp('\\\\|[\'\\n\\r\\t\u2028\u2029]', 'g'); - /** Used to fix JScript's [[DontEnum]] bug in IE < 9 */ + /** Used to fix the JScript [[DontEnum]] bug */ var shadowed = [ 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf' @@ -401,10 +401,10 @@ ) + '\n}' + (hasDontEnumBug - ? // because IE < 9 can't set the `[[Enumerable]]` attribute of an + ? // Because IE < 9 can't set the `[[Enumerable]]` attribute of an // existing property and the `constructor` property of a prototype // defaults to non-enumerable, Lo-Dash skips the `constructor` - // property when it infers it's iterating over a `prototype` object + // property when it infers it's iterating over a `prototype` object. 'var ctor = ' + iteratedObject + '.constructor,\n' + 'skipCtor = ctor && ctor.prototype && ctor.prototype.constructor === ctor;\n' + 'for (var j = 0; j < 7; j++) {\n' + @@ -3064,7 +3064,7 @@ func.apply(value, arguments); // IE compatibility mode and IE < 9 have buggy Array `shift()` and `splice()` - // functions that fail to remove the last element, `object[0]`, of + // functions that fail to remove the last element, `value[0]`, of // array-like-objects even though the `length` property is set to `0`. // The `shift()` method is buggy in IE 8 compatibility mode, while `splice()` // is buggy regardless of mode in IE < 9 and buggy in compatibility mode in IE 9. diff --git a/test/test.js b/test/test.js index 46454ccfd..5560db9d0 100644 --- a/test/test.js +++ b/test/test.js @@ -390,6 +390,34 @@ /*--------------------------------------------------------------------------*/ + QUnit.module('lodash(...).shift'); + + (function() { + test('should remove the value at index `0` when length is `0` (test in IE 8 compatibility mode)', function() { + var wrapped = _({ '0': 1, 'length': 1 }); + wrapped.shift(); + + deepEqual(wrapped.keys(), ['length']); + equal(wrapped.first(), undefined); + }); + }()); + + /*--------------------------------------------------------------------------*/ + + QUnit.module('lodash(...).splice'); + + (function() { + test('should remove the value at index `0` when length is `0` (test in IE < 9, and in compatibility mode for IE9)', function() { + var wrapped = _({ '0': 1, 'length': 1 }); + wrapped.splice(0, 1); + + deepEqual(wrapped.keys(), ['length']); + equal(wrapped.first(), undefined); + }); + }()); + + /*--------------------------------------------------------------------------*/ + // explicitly call `QUnit.start()` in a CLI environment if (!window.document) { QUnit.start();