此代码在Internet Explorer中不起作用。还有其他选择吗?
"abcde".includes("cd")
答案 0 :(得分:77)
String.prototype.includes
在Internet Explorer(或Opera)中不受支持。
相反,您可以使用String.prototype.indexOf
。 #indexOf
返回子字符串的第一个字符的索引(如果它在字符串中),否则返回-1
。 (很像数组等效)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN使用includes
对indexOf
进行了填充:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
编辑:Opera从version 28开始支持includes
。
答案 1 :(得分:20)
或者只是把它放在一个Javascript文件中,祝你有个美好的一天:)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
答案 2 :(得分:8)
includes()。您可以选择使用
- 来自MDN的
或使用
-indexof()
var str = "abcde";
var n = str.indexOf("cd");
这给你n = 2
这得到了广泛的支持。
答案 3 :(得分:4)
首先尝试在下面运行(无解决方案)以查看IE中的结果
console.log("abcde".includes("cd"));
if (!String.prototype.includes) {
String.prototype.includes = function (str) {
return this.indexOf(str) !== -1;
}
}
console.log("abcde".includes("cd"));
答案 4 :(得分:3)
这可能会更好更短:
function stringIncludes(a, b) {
return a.indexOf(b) >= 0;
}
答案 5 :(得分:1)
在Angular 5中工作时,我遇到了同样的问题。为了使其直接工作而无需自己编写polyfill,只需将以下行添加到polyfills.ts文件中即可:
import "core-js/es7/array"
此外,tsconfig.json
lib节可能是相关的:
"lib": [
"es2017",
"dom"
],
答案 6 :(得分:0)
如果您想在javascript中继续使用Array.prototype.include()
,可以使用以下脚本:
github-script-ie-include
如果检测到IE,则会自动将include()转换为match()函数。
其他选项始终使用string.match(Regex(expression))
答案 7 :(得分:0)
您可以使用!!和〜运算符
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
这是两个运算符(!!和〜)的解释
What is the !! (not not) operator in JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/
答案 8 :(得分:0)
要做出反应:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
问题解决-包括(),查找()等。
答案 9 :(得分:0)
它对我有用:
prettier-eslint