Mẹo gỡ lỗi mã nguồn với ví dụ về vòng lặp trong JavaScript
Bây giờ tôi sẽ dạy bạn phương pháp tìm lỗi trong mã. Hãy tưởng tượng rằng vì một sự hiểu lầm nào đó, bạn đã không làm theo lời khuyên từ bài học trước và nhận được mã không hoạt động. Hãy cùng xem cách tìm lỗi và làm cho nó hoạt động.
Nhiều người mới bắt đầu sử dụng phương pháp tìm kiếm không chính xác. Họ lấy mã ra và nhìn vào nó, hy vọng sẽ nhận thấy lỗi. Và cứ như vậy trong vài giờ. Điều đó không hiệu quả.
Phương pháp chính xác là in các biến ra console và xác định xem giá trị trong đó có phải là thứ cần thiết hay không. Trong trường hợp này, bạn cần bắt đầu từ vị trí nghi ngờ có vấn đề và di chuyển ngược lên phía trên trong mã. Hãy xem xét trong thực tế.
Ví dụ, giả sử bạn có nhiệm vụ duyệt qua một mảng chứa các số có hai chữ số và tìm các số mà chữ số đầu tiên lớn hơn chữ số thứ hai một đơn vị. Giả sử để đơn giản, các số trong mảng được lưu trữ dưới dạng chuỗi.
Giả sử bạn đã giải quyết nhiệm vụ và nhận được mã sau:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum); // trả về 0
Tuy nhiên, mã trả về 0. Trong
trường hợp này, việc đầu tiên cần làm là kiểm tra xem
liệu việc thực thi mã có đi vào trong câu lệnh if không.
Hãy in một cái gì đó ra console bên trong nó:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (elem[0] === elem[1] + 1) {
console.log('!'); // không in ra gì cả
sum += elem;
}
}
console.log(sum);
Vì không có gì xuất hiện trong console, điều này có nghĩa là việc thực thi mã đơn giản là không đi vào điều kiện. Hãy tự mình xem xét chúng ta đang so sánh những gì:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
console.log(elem[0], elem[1] + 1); // '2' và '11', '3' và '21' ...
if (elem[0] === elem[1] + 1) {
sum += elem;
}
}
console.log(sum);
Kết quả là ngay lập tức có thể thấy, số hạng thứ hai có hai chữ số. Dễ dàng hiểu rằng điều này là do số một được cộng như một chuỗi. Hãy sửa vấn đề:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) { // sửa lỗi
sum += elem;
}
}
console.log(sum); // '021324354'
Sau khi sửa, chúng ta đã thấy rằng
trong biến sum đã có một cái gì đó xuất hiện,
mặc dù không chính xác. Tuy nhiên, có thể thấy
rằng đó là thứ chúng ta cần,
nhưng chúng được cộng lại dưới dạng chuỗi,
chứ không phải số. Hãy sửa vấn đề:
let arr = ['21', '32', '34', '43', '45', '54', '55'];
let sum = 0;
for (let elem of arr) {
if (+elem[0] === +elem[1] + 1) {
sum += +elem; // sửa lỗi
}
}
console.log(sum); // tất cả hoạt động
Sửa các lỗi được mắc phải trong mã sau:
let obj = {a: 10, b: 20, c: 30, d: 40, e: 50};
let sum = 0;
for (let elem in obj) {
if (elem[0] === '1' && elem[0] === '2') {
sum += +elem;
}
}
console.log(sum);