heyujie
2021-06-07 8f8155aa4c83f7c2577ac123add550766b6a7ce3
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
"use strict";
 
var numberIsNaN       = require("../../number/is-nan")
  , toPosInt          = require("../../number/to-pos-integer")
  , value             = require("../../object/valid-value")
  , lastIndexOf       = Array.prototype.lastIndexOf
  , objHasOwnProperty = Object.prototype.hasOwnProperty
  , abs               = Math.abs
  , floor             = Math.floor;
 
module.exports = function (searchElement/*, fromIndex*/) {
    var i, fromIndex, val;
    if (!numberIsNaN(searchElement)) {
        // Jslint: ignore
        return lastIndexOf.apply(this, arguments);
    }
 
    value(this);
    fromIndex = arguments[1];
    if (isNaN(fromIndex)) fromIndex = toPosInt(this.length) - 1;
    else if (fromIndex >= 0) fromIndex = floor(fromIndex);
    else fromIndex = toPosInt(this.length) - floor(abs(fromIndex));
 
    for (i = fromIndex; i >= 0; --i) {
        if (objHasOwnProperty.call(this, i)) {
            val = this[i];
            if (numberIsNaN(val)) return i; // Jslint: ignore
        }
    }
    return -1;
};