Javascript .includes()无法在IE中运行

时间:2017-06-01 19:45:24

标签: javascript

我正在处理一个查看页面上的表值列表的函数,如果列标题包含output的任何部分,它将相应地转换该值。

function createLink(field, val) {

var output = {
    'ntid': 'https://internal/profile/' + val,
    'email': 'mailTo:' + val
};

var i, key, keys = Object.keys(output);
for ( i = 0; i < keys.length; ++i ) {
        key = keys[i];
  if ((field.toLowerCase()).includes(key)) {
     return '<a href="'+output[key]+'" target="_blank">'+val+'</a>';
  }
}

return val;
}

我遇到的问题是IE在.includes()行引发错误,指出“对象不支持属性或方法'包含'”。

让它按原样运行有点麻烦,但没有意识到includes()必须是并非所有浏览器都支持的东西。

还有什么我可以用来代替这个,以便支持跨浏览器支持吗?

3 个答案:

答案 0 :(得分:10)

includes() is part of the ES6规范,因此在IE中不受支持。您可以使用的是indexOf(element) !== -1

答案 1 :(得分:5)

取代:

if(field.toLowerCase().includes(key)) {

为:

if(field.toLowerCase().indexOf(key) > -1) {

答案 2 :(得分:1)

供您参考,Mozilla Developer Network显示哪些浏览器支持String.prototype.includes

IE没有任何支持。话虽如此,您可以随时对其进行填充,或者像其他人指定的那样进行填充并使用String.prototype.indexOf

Polyfill src:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }

    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}