在使用Chrome浏览器时,string.contains()不存在。

15

我有这样的一段代码:

var valid = viewName.contains('/');

在Firefox浏览器中正常工作,但在Chrome中出现undefined。为什么会这样?是否Chrome没有字符串的这种方法?

使用indexOf代替contains是否可以?它在所有浏览器中都被支持吗?


2
缺失的引号是否是打字错误? - Niccolò Campolungo
1
它在我的Chrome中定义,版本为28.0.1500.71,但根据MDN的说法,它不受支持,所以可能是他们刚刚添加了它。至于indexOf,它已经存在了相当长的时间,因此可以使用。 - Patrick Evans
@LightStyle 是的,我刚刚纠正了它。 - mehrandvd
2
根据ES6 Harmony Proposal,现在被命名为.includes - Ray Suelzer
请注意,现在已经过时且不正确的是被接受的答案。请看我下面的回答!祝编码愉快。 - GrayedFox
4个回答

40

String.contains()的浏览器兼容性

String.indexOf() 是我使用的方法,可以正常工作。

  var strIndex = viewName.indexOf('/');
  if(strIndex == -1) {
     //string not found
  } else {
    //string found
  }

但是,万一你想要一个 contains() 函数,你可以按照以下步骤将其添加到String中:

 if(!('contains' in String.prototype)) {
       String.prototype.contains = function(str, startIndex) {
                return -1 !== String.prototype.indexOf.call(this, str, startIndex);
       };
 }

var valid = viewName.contains('/');
if(valid) {
  //string found
} else {
  //string not found
}

你的 polyfill 有问题 - contains 的规范不同。请参考 MDN。 - georg
2
提醒一下:ES6草案标准将.contains()更改为.includes() .contains()最终将从Firefox中删除,并用标准的.includes替换。目前,Chrome提供.includes - Ray Suelzer
在浏览器中使用 polyfill 来提供已经存在的功能,我认为这是不好的做法。此外,这个答案现在已经过时了。也许作者可以更新一下? - GrayedFox
2
在答案被添加的时候,不是所有浏览器都原生支持contains函数。 - Rajesh

9

现在,Firefox和Chrome都默认禁用了此功能。如果您正在查找最新答案,可以在此处查看原因以及新的方法名称(即String.includes)。

尝试:

yourString.includes('searchString')


2

1
字符串的 contains 方法最初是在 V8 中 首次添加,然后在 Chrome 版本 30.0.1583.0 之后 包含,但默认情况下被禁用。只有在您启用 "实验性 JavaScript 功能" 的情况下,此功能才可用于 chrome://flags/#enable-javascript-harmony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接