| 'use strict'; |
| var $ = require('../internals/export'); |
| var aFunction = require('../internals/a-function'); |
| var toObject = require('../internals/to-object'); |
| var fails = require('../internals/fails'); |
| var sloppyArrayMethod = require('../internals/sloppy-array-method'); |
| |
| var nativeSort = [].sort; |
| var test = [1, 2, 3]; |
| |
| // IE8- |
| var FAILS_ON_UNDEFINED = fails(function () { |
| test.sort(undefined); |
| }); |
| // V8 bug |
| var FAILS_ON_NULL = fails(function () { |
| test.sort(null); |
| }); |
| // Old WebKit |
| var SLOPPY_METHOD = sloppyArrayMethod('sort'); |
| |
| var FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || SLOPPY_METHOD; |
| |
| // `Array.prototype.sort` method |
| // https://tc39.github.io/ecma262/#sec-array.prototype.sort |
| $({ target: 'Array', proto: true, forced: FORCED }, { |
| sort: function sort(comparefn) { |
| return comparefn === undefined |
| ? nativeSort.call(toObject(this)) |
| : nativeSort.call(toObject(this), aFunction(comparefn)); |
| } |
| }); |