# All files implementation.js

92% Statements 23/25
81.25% Branches 13/16
100% Functions 1/1
92% Lines 23/25

    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

    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x
    1x

    1x
    1x

    1x
    37x
    36x
    30x

    6x
    4x
    4x

    4x
    4x
    3x
    3x

    1x

     'use strict';

    var ToInteger = require('es-abstract/2020/ToInteger');
    var ToLength = require('es-abstract/2020/ToLength');
    var ToObject = require('es-abstract/2020/ToObject');
    var SameValueZero = require('es-abstract/2020/SameValueZero');
    var $isNaN = require('es-abstract/helpers/isNaN');
    var $isFinite = require('es-abstract/helpers/isFinite');
    var GetIntrinsic = require('get-intrinsic');
    var callBound = require('call-bind/callBound');
    var isString = require('is-string');

    var $charAt = callBound('String.prototype.charAt');
    var $indexOf = GetIntrinsic('%Array.prototype.indexOf%'); // TODO: use callBind.apply without breaking IE 8

    module.exports = function includes(searchElement) {
    	var fromIndex = arguments.length > 1 ? ToInteger(arguments[1]) : 0;
    	if ($indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== 'undefined') {
    		return $indexOf.apply(this, arguments) > -1;
    	}

    	var O = ToObject(this);
    	var length = ToLength(O.length);
    	Iif (length === 0) {
    		return false;
    	}
    	var k = fromIndex >= 0 ? fromIndex : Math.max(0, length + fromIndex);
    	while (k < length) {
    		Eif (SameValueZero(searchElement, isString(O) ? $charAt(O, k) : O[k])) {
    			return true;
    		}
    		k += 1;
    	}
    	return false;
    };