heyujie
2021-05-24 4885600ecc369aa2e30a65de8dd7a410f13c34df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
"use strict";
 
var toInteger         = require("../../../number/to-integer")
  , toPosInt          = require("../../../number/to-pos-integer")
  , isPlainArray      = require("../../is-plain-array")
  , isArray           = Array.isArray
  , slice             = Array.prototype.slice
  , objHasOwnProperty = Object.prototype.hasOwnProperty
  , max               = Math.max;
 
module.exports = function (start, end) {
    var length, result, i;
    if (!this || !isArray(this) || isPlainArray(this)) {
        return slice.apply(this, arguments);
    }
    length = toPosInt(this.length);
    start = toInteger(start);
    if (start < 0) start = max(length + start, 0);
    else if (start > length) start = length;
    if (end === undefined) {
        end = length;
    } else {
        end = toInteger(end);
        if (end < 0) end = max(length + end, 0);
        else if (end > length) end = length;
    }
    if (start > end) start = end;
    result = new this.constructor(end - start);
    i = 0;
    while (start !== end) {
        if (objHasOwnProperty.call(this, start)) result[i] = this[start];
        ++i;
        ++start;
    }
    return result;
};