Để làm cho các chức năng hoạt động linh hoạt hơn, các lập trình viên thường cố gắng làm cho chúng hoạt động khác nhau đối với các loại giá trị khác nhau. Một cách tốt để kiểm tra xem giá trị đã cho có thuộc về một lớp nhất định hay không bằng cách sử dụng toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9Toán tử này kiểm tra xem có một hàm tạo được chỉ định trong nguyên mẫu của đối tượng hay không và trả về một giá trị boolean, kết quả là
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 hoặc function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0. Trong một số phiên bản mới hơn của tiêu chuẩn JS, nó cũng có thể kiểm tra xem đối tượng có phải là một thể hiện của lớp cụ thể hay khôngInstanceof toán tử
Để sử dụng toán tử này, bạn cần viết tên của đối tượng mà bạn muốn kiểm tra, theo sau nó là câu lệnh
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 và sau đó chỉ định lớp mà bạn cho rằng đối tượng đó thuộc vềDưới đây là một ví dụ đơn giản minh họa việc sử dụng hợp lý toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9. Như bạn có thể thấy, có lớp Person và thể hiện của nó được tạo, vì vậy toán tử trả về function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
4 cũng hoạt động tốt đối với hàm tạo hàmfunction Person[] {}
console.log [new Person[] instanceof Person]; // logs true
Theo cách tương tự, bạn có thể kiểm tra xem đối tượng của mình có phải là một thể hiện của các lớp dựng sẵn như Mảng, Chuỗi, Bản đồ hoặc Đối tượng hay không. Ví dụ, trong mẫu mã tiếp theo có một mảng số và toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 cho biết nó thuộc về lớp function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
6. Hãy nhớ rằng nó cũng là một thể hiện của lớp function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
7 vì function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
6 được kế thừa từ lớp function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
7. Đó là lý do tại sao function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 được trả lại trong cả hai trường hợp________số 8Làm thế nào nó hoạt động
Thông thường trong quá trình thực thi, toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 đi qua chuỗi nguyên mẫu. Tuy nhiên, hành vi này có thể được thay đổi bằng phương pháp tĩnh array = [0, 1, 2];
console.log[array instanceof Array]; // logs true
console.log[array instanceof Object]; // logs true
2. Thuật toán của toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 rất đơn giản. Nó kiểm tra xem lớp có chứa phương thức array = [0, 1, 2];
console.log[array instanceof Array]; // logs true
console.log[array instanceof Object]; // logs true
2 không. Nếu có một phương thức như vậy, toán tử sẽ chỉ trả về function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 hoặc function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 và đó là tất cả. Vì vậy, cách để cấu hình công việc của toán tử function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 theo cách thủ công là triển khai phương thức tĩnh array = [0, 1, 2];
console.log[array instanceof Array]; // logs true
console.log[array instanceof Object]; // logs true
2. Đoạn mã dưới đây minh họa một trường hợp như vậyclass Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
3Từ ví dụ này, bạn có thể thấy cách
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 sẽ trả về function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 cho bất kỳ đối tượng nào có thuộc tính class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
31 vì hành vi đó được chỉ định trong phương thức tĩnh class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
32. Hầu hết các lớp không có phương thức như vậy được triển khai. Trong những trường hợp này, toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 sử dụng logic tiêu chuẩn và kiểm tra chuỗi nguyên mẫu để xem có bất kỳ nguyên mẫu nào bằng với class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
34 không. Nếu bất kỳ phép so sánh nào từ đoạn mã sau trả về
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0, thì kết quả cũng sẽ là function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0, nếu không thì sẽ trả về function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0. Bằng cách này, bạn có thể thấy toán tử này hoạt động như thế nào với tính kế thừa. class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
8Sự khác biệt giữa typeof và instanceof
Cả hai toán tử
class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
38 và function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 thường được sử dụng để kiểm tra xem biến có trống hay không hoặc kiểu của nó là gì. Tuy nhiên, chúng không hoạt động theo cùng một cách. Ví dụ, khi bạn tạo một chuỗi đơn giản và kiểm tra kiểu của nó, kết quả trả về sẽ là class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
80. Đồng thời, nếu bạn kiểm tra xem biến này có phải là một thể hiện của lớp class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
81 hay không, bạn sẽ nhận được function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
3Toán tử
class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
38 cho phép bạn kiểm tra xem giá trị có thuộc một trong sáu kiểu dữ liệu nguyên thủy hay không. số, chuỗi, boolean, đối tượng, hàm hoặc không xác định, trong khi function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 hoạt động trực tiếp với các lớp. Nó có thể gây nhầm lẫn nhưng
class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
85 không giống như class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
86. Trong trường hợp đầu tiên, bạn làm việc với một chuỗi nguyên thủy, trong trường hợp thứ hai, có một đối tượng được tạo. Vì vậy, kết quả của class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
87 sẽ là một class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
88. function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9Do đó, bất cứ khi nào bạn làm việc với một biến nguyên thủy hoặc muốn kiểm tra loại gốc của nó - hãy sử dụng toán tử
class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
38, nếu không thì function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 là một giải pháp phù hợp. Người ta có thể nói rằng toán tử function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 tốt hơn để sử dụng với mọi thứ được tạo bằng từ khóa function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
32. Tuy nhiên, có một ngoại lệ - một chức năng. Toán tử sẽ nhận ra các hàm được tạo ngay cả bởi một khai báo thông thường như trong ví dụ bên dướifunction Person[] {}
console.log [new Person[] instanceof Person]; // logs true
2Trong khi so sánh hai nhà khai thác, năng suất cũng quan trọng.
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
33chỉ kiểm tra loại gốc một lần khi function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 cần trải qua toàn bộ chuỗi nguyên mẫu. Ngoài ra, toán tử đầu tiên có thể trả về kiểu thực của biến trong khi toán tử thứ hai chỉ trả về một trong hai giá trị boolean. đúng hoặc sai. Phần kết luận
Toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 cho phép bạn kiểm tra xem đối tượng có thuộc một lớp nào đó hay không. Nó trả về function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 nếu thuộc tính của nguyên mẫu xuất hiện ở bất kỳ đâu trong chuỗi nguyên mẫu hoặc function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
0 nếu không. Những người mới bắt đầu thường lẫn lộn các toán tử
function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
9 và class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
38. Mặc dù chúng có vẻ giống nhau, nhưng khái niệm của chúng khá khác nhau. function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
33 được sử dụng khi chỉ làm việc với các biến nguyên thủy hoặc ký tự và trả về kiểu dữ liệu của chúng. Toán tử class Person {}
let person = new Person[];
console.log[person instanceof Person]; // logs true
38 thường nhanh hơn function Person[] {}
console.log [new Person[] instanceof Person]; // logs true
92, vì vậy đối với các tình huống khi cả hai đều có thể được sử dụng, tốt hơn hết là sử dụng toán tử đầu tiên