Mã này không hoạt động trong trình khám phá internet. Bất kỳ thay thế?
"abcde".includes("cd")
Mã này không hoạt động trong trình khám phá internet. Bất kỳ thay thế?
"abcde".includes("cd")
Câu trả lời:
String.prototype.includes
như bạn viết, không được hỗ trợ trong Internet Explorer (hoặc Opera).
Thay vào đó bạn có thể sử dụng String.prototype.indexOf
. #indexOf
trả về chỉ số của ký tự đầu tiên của chuỗi con nếu nó nằm trong chuỗi, nếu không thì trả về -1
. (Giống như mảng tương đương)
var myString = 'this is my string';
myString.indexOf('string');
// -> 11
myString.indexOf('hello');
// -> -1
MDN có một polyfill để includes
sử dụng indexOf
: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes#Polyfill
CHỈNH SỬA: Opera hỗ trợ includes
kể từ phiên bản 28 .
CHỈNH SỬA 2: Các phiên bản Edge hiện tại hỗ trợ phương pháp này. (tính đến năm 2019)
Boolean
, chúng tôi có thể(myString.indexOf('string') > -1) // to get a boolean true or false
Hoặc chỉ cần đặt điều này trong một tệp Javascript và có một ngày tốt lành :)
String.prototype.includes = function (str) {
var returnValue = false;
if (this.indexOf(str) !== -1) {
returnValue = true;
}
return returnValue;
}
for...in
, nó sẽ lặp lại String.prototype.includes
nếu nó được định nghĩa như thế này.
return this.indexOf(str) !== -1;
bao gồm () không được hỗ trợ bởi hầu hết các trình duyệt. Tùy chọn của bạn là sử dụng
-polyfill từ MDN https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/includes
hoặc để sử dụng
-Chỉ số()
var str = "abcde";
var n = str.indexOf("cd");
Cho bạn n = 2
Điều này được ủng hộ rộng rãi.
for...in
! , nó sẽ lặp lại String.prototype.includes
nếu bạn định nghĩa nó như vậy.
Vấn đề:
Hãy thử chạy bên dưới (không có giải pháp) từ Internet Explorer và xem kết quả.
console.log("abcde".includes("cd"));
Giải pháp:
Bây giờ chạy giải pháp bên dưới và kiểm tra kết quả
if (!String.prototype.includes) {//To check browser supports or not
String.prototype.includes = function (str) {//If not supported, then define the method
return this.indexOf(str) !== -1;
}
}
console.log("abcde".includes("cd"));
Cái này có thể tốt hơn và ngắn hơn:
function stringIncludes(a, b) {
return a.indexOf(b) >= 0;
}
Tôi đã gặp vấn đề tương tự khi làm việc trong Angular 5. Để làm cho nó hoạt động trực tiếp mà không cần tự viết polyfill, chỉ cần thêm dòng sau vào tệp polyfills.ts:
import "core-js/es7/array"
Ngoài ra, tsconfig.json
phần lib có thể có liên quan:
"lib": [
"es2017",
"dom"
],
Đối với phản ứng:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Giải quyết vấn đề cho - bao gồm (), tìm (), v.v.
Nếu bạn muốn tiếp tục sử dụng Array.prototype.include()
trong javascript, bạn có thể sử dụng tập lệnh này:
github-script-ie-include
Điều đó sẽ tự động chuyển đổi hàm include () thành hàm match () nếu nó phát hiện ra IE.
Tùy chọn khác luôn sử dụngstring.match(Regex(expression))
Nó hoạt động cho tôi:
function stringIncludes(a, b) {
return a.indexOf(b) !== -1;
}
Bạn có thể làm tương tự với !! và ~ toán tử
var myString = 'this is my string';
!!~myString.indexOf('string');
// -> true
!!~myString.indexOf('hello');
// -> false
đây là lời giải thích của hai toán tử (!! và ~)
Là gì !! (not not) toán tử trong JavaScript?
https://www.joezimjs.com/javascript/great-mystery-of-the-tilde/