El método includes() determina si una matriz incluye un determinado elemento, devuelve truefalse según corresponda. Utiliza el algoritmo sameValueZero para determinar si se encuentra el elemento dado.

Sintaxis

arr.includes(searchElement[fromIndex])

Parámetros

searchElement
El elemento a buscar.
fromIndex Optional
Posición en la matriz en la cuál se debe comenzar a buscar searchElement. Un valor negativo inicia la búsqueda desde array.length + fromIndex en adelante. El valor por defecto es 0.

Valor de retorno

Un Boolean.

Ejemplos

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

fromIndex es mayor o igual que la longitud de la matriz

Si fromIndex es mayor o igual que la longitud de la matriz, se devuelve false. No se buscará en la matriz.

var arr = ['a', 'b', 'c'];

arr.includes('c', 3);   // false
arr.includes('c', 100); // false

El índice calculado es menor que 0

Si fromIndex es negativo, el índice calculado se calcula para usarse como una posición en la matriz en la cual comenzar a buscar searchElement. Si el índice calculado es menor que 0, se buscará la matriz completa.

// la longitud de la matriz es 3
// fromIndex es -100
// el índice calculado es 3 + (-100) = -97

var arr = ['a', 'b', 'c'];

arr.includes('a', -100); // true
arr.includes('b', -100); // true
arr.includes('c', -100); // true

includes() utilizado como método genérico

El método includes() es intencionalmente genérico. No requiere que este valor sea un objeto Array, por lo que se puede aplicar a otros tipos de objetos (por ejemplo, objetos tipo array). El siguiente ejemplo ilustra el método includes() llamado en el objeto de argumentos de la función.

(function() {
  console.log([].includes.call(arguments, 'a')); // true
  console.log([].includes.call(arguments, 'd')); // false
})('a','b','c');

Polyfill

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(searchElement, fromIndex) {

      if (this == null) {
        throw new TypeError('"this" es null o no está definido');
      }

      // 1. Dejar que O sea ? ToObject(this value).
      var o = Object(this);

      // 2. Dejar que len sea ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. Si len es 0, devuelve false.
      if (len === 0) {
        return false;
      }

      // 4. Dejar que n sea ? ToInteger(fromIndex).
      //    (Si fromIndex no está definido, este paso produce el valor 0.)
      var n = fromIndex | 0;

      // 5. Si n ≥ 0, entonces
      //  a. Dejar que k sea n.
      // 6. Else n < 0,
      //  a. Dejar que k sea len + n.
      //  b. Si k < 0, Dejar que k sea 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }

      // 7. Repite, mientras k < len
      while (k < len) {
        // a. Dejar que elementK sea el resultado de ? Get(O, ! ToString(k)).
        // b. Si SameValueZero(searchElement, elementK) es true, devuelve true.
        if (sameValueZero(o[k], searchElement)) {
          return true;
        }
        // c. Incrementa k por 1.
        k++;
      }

      // 8. Devuelve false
      return false;
    }
  });
}

Si necesita admitir motores de JavaScript realmente obsoletos que no son compatibles con Object.defineProperty, es mejor no rellenar los métodos Array.prototype, ya que no puede hacerlos no enumerables.

Especificaciones

Especificación Estado Comentarios
ECMAScript 2016 (ECMA-262)
La definición de 'Array.prototype.includes' en esta especificación.
Standard Definición inicial.
ECMAScript Latest Draft (ECMA-262)
La definición de 'Array.prototype.includes' en esta especificación.
Draft  

Compatibilidad con navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
Soporte básicoChrome Soporte completo 47Edge Soporte completo 14Firefox Soporte completo 43IE Sin soporte NoOpera Soporte completo 34Safari Soporte completo 9WebView Android Soporte completo SiChrome Android Soporte completo SiEdge Mobile Soporte completo 14Firefox Android Soporte completo 43Opera Android Soporte completo 34Safari iOS Soporte completo 9Samsung Internet Android Soporte completo Sinodejs Soporte completo 6.0.0
Soporte completo 6.0.0
Soporte completo 5.0.0
Deshabilitado
Deshabilitado From version 5.0.0: this feature is behind the --harmony runtime flag.

Leyenda

Soporte completo  
Soporte completo
Sin soporte  
Sin soporte
El usuario debe de habilitar explícitamente esta característica.
El usuario debe de habilitar explícitamente esta característica.

 

Ver también

Etiquetas y colaboradores del documento

Colaboradores en esta página: AlePerez92, lajaso, jorgeyp, patoezequiel, Estoja, degj21, wffranco, DRayX
Última actualización por: AlePerez92,