Các lỗi phổ biến trong JavaScript là gì?

JavaScript là ngôn ngữ kịch bản được sử dụng trong các trang web để thêm chức năng và tính tương tác. Đối với người mới bắt đầu đến từ một ngôn ngữ lập trình khác, JavaScript khá dễ hiểu. Với một vài hướng dẫn, bạn sẽ có thể bắt đầu với nó ngay lập tức

Tuy nhiên, có một vài lỗi phổ biến mà nhiều lập trình viên mới bắt đầu mắc phải. Trong bài viết này, chúng tôi sẽ giải quyết 9 lỗi phổ biến (hoặc các lỗi thực hành không tốt) và các giải pháp của chúng để giúp bạn trở thành một nhà phát triển JS giỏi hơn

Nhầm lẫn các toán tử gán (=) và đẳng thức (==, ===)

Giống như tên gọi của nó, toán tử gán (=) được sử dụng để gán giá trị cho các biến. Các nhà phát triển thường nhầm lẫn nó với toán tử đẳng thức

Đây là một ví dụ

const name = "javascript";
if ((name = "nodejs")) {
    console.log(name);
}
// output - nodejs

Biến tên và chuỗi ‘nodejs' không được so sánh trong trường hợp này. Thay vào đó, 'nodejs' được gán cho tên và 'nodejs' được in ra bảng điều khiển

Trong JavaScript, dấu bằng kép (==) và dấu bằng ba (===) được gọi là toán tử so sánh

Đối với đoạn mã trên, đây là cách thích hợp để so sánh các giá trị

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output

Sự khác biệt giữa các toán tử so sánh này là dấu bằng kép thực hiện phép so sánh lỏng lẻo trong khi dấu bằng ba thực hiện phép so sánh nghiêm ngặt

Trong một so sánh lỏng lẻo, chỉ các giá trị được so sánh. Nhưng trong một so sánh nghiêm ngặt, các giá trị và kiểu dữ liệu được so sánh

Đoạn mã sau giải thích nó tốt hơn

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false

Biến số được gán giá trị chuỗi là 1. Khi được so sánh với 1 (của loại số) bằng cách sử dụng giá trị kép, nó sẽ trả về giá trị đúng vì cả hai giá trị đều là 1

Nhưng khi so sánh bằng ba giá trị, nó trả về false vì mỗi giá trị có một kiểu dữ liệu khác nhau

Mong đợi các cuộc gọi lại được đồng bộ

Gọi lại là một cách mà JavaScript xử lý các hoạt động không đồng bộ. Tuy nhiên, các lời hứa và không đồng bộ/chờ đợi là các phương pháp thích hợp hơn để xử lý các hoạt động không đồng bộ vì nhiều lệnh gọi lại dẫn đến địa ngục gọi lại

Gọi lại không đồng bộ. Chúng được sử dụng như một chức năng được gọi sau một hoạt động khi quá trình thực thi bị trì hoãn hoàn tất

Một ví dụ là hàm

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
3 toàn cầu nhận hàm gọi lại làm đối số đầu tiên và thời lượng (tính bằng ms) làm đối số thứ hai như vậy

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first

Sau 300 mili giây, chức năng gọi lại được gọi. Nhưng trước khi hoàn thành, phần còn lại của mã sẽ chạy. Đây là lý do tại sao giao diện điều khiển cuối cùng. nhật ký được chạy đầu tiên. .

Một lỗi phổ biến mà các nhà phát triển mắc phải là hiểu sai các cuộc gọi lại là đồng bộ. Ví dụ: một cuộc gọi lại trả về một giá trị sẽ được sử dụng cho các hoạt động khác

Đây là sai lầm đó

function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
4​ là đầu ra vì
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
5 không xác định​. Tại thời điểm chạy
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
6,
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
7 vẫn chưa được xác định vì hàm
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
8 sẽ thực hiện gọi lại sau
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
9

Cách tốt nhất để tiếp cận điều này là thực thi phần còn lại của mã trong hàm gọi lại

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
2

Tham chiếu sai đến function callback() { ​​ console.log("I am the first"); ​​} ​​setTimeout(callback, 300); ​​console.log("I am the last"); ​​// output ​​// I am the last ​​// I am the first0

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0 là một khái niệm thường bị hiểu lầm trong JavaScript. Để sử dụng
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
2​ trong JavaScript, bạn thực sự cần hiểu cách thức hoạt động của nó vì nó hoạt động hơi khác so với các ngôn ngữ khác

Đây là một ví dụ về một lỗi phổ biến khi sử dụng

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
7

Kết quả đầu tiên là

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
4 vì
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
5 trỏ chính xác đến thuộc tính name của đối tượng. Kết quả thứ hai là
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
6 vì
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0 đã mất tham chiếu đến các thuộc tính của đối tượng (bao gồm cả tên)

Điều này là do

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0 phụ thuộc vào đối tượng gọi hàm chứa nó. Có một biến
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
2​ trong mọi hàm nhưng đối tượng mà nó trỏ tới được xác định bởi đối tượng gọi nó

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0 trong
function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN
1​ trỏ trực tiếp đến
function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN
2​.
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
2​ trong
function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN
4 trỏ trực tiếp đến
function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN
5. Nhưng
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0 trong hàm gọi lại của
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
3 không trỏ đến bất kỳ đối tượng nào vì không có đối tượng nào gọi nó

Đối với một đối tượng được gọi là

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
3, một cái gì đó như
function addTwoNumbers() {
​​    let firstNumber = 5;
​​    let secondNumber;
​​    setTimeout(function () {
​​        secondNumber = 10;
​​    }, 200);
​​    console.log(firstNumber + secondNumber);
​​}
​​addTwoNumbers();
​​// NaN
9 sẽ được thực thi. Vì không có đối tượng nào gọi hàm đó nên đối tượng mặc định (là
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
20​) được sử dụng

_

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
21​ không tồn tại trên cửa sổ​, kết quả là
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
22​

Cách tốt nhất để giữ lại tham chiếu đến

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
2​ trong
const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
8 là sử dụng ________ 125, ________ 126, ________ 127​ ​​hoặc các hàm mũi tên (được giới thiệu trong ES6). Không giống như các chức năng thông thường, các chức năng mũi tên không tạo
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
2 của riêng mình

Vì vậy, phần sau đây sẽ giữ nguyên tham chiếu đến

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
0. .

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
4

Bỏ qua tính biến đổi của đối tượng

Không giống như các kiểu dữ liệu nguyên thủy như chuỗi, số, v.v., trong JavaScript các đối tượng là kiểu dữ liệu tham chiếu. Ví dụ: trong các đối tượng khóa-giá trị

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
5

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
70 và
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
71​ sở hữu cùng một tham chiếu đến vị trí trong bộ nhớ nơi đối tượng được lưu trữ

Trong mảng

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
8

Một lỗi phổ biến mà các nhà phát triển mắc phải là họ coi thường bản chất này của JavaScript và điều này dẫn đến các lỗi không mong muốn. Chẳng hạn, nếu 5 đối tượng có cùng tham chiếu đến cùng một đối tượng, một trong các đối tượng có thể can thiệp vào các thuộc tính trong cơ sở mã quy mô lớn

Khi điều này xảy ra, mọi nỗ lực truy cập các thuộc tính ban đầu sẽ trả về không xác định​ hoặc có thể gây ra lỗi

Cách thực hành tốt nhất cho việc này là luôn tạo các tham chiếu mới cho các đối tượng mới khi bạn muốn sao chép một đối tượng. Để làm được điều này, toán tử nghỉ (

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
72  được giới thiệu trong ES6) là một giải pháp hoàn hảo

Ví dụ: trong các đối tượng khóa-giá trị

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
0

trong mảng

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
1

Lưu mảng và đối tượng vào bộ lưu trữ của trình duyệt

Đôi khi, khi làm việc với JavaScript, các nhà phát triển có thể muốn tận dụng lợi thế của

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
73 để lưu các giá trị. Nhưng một lỗi phổ biến là cố lưu các mảng và đối tượng như vốn có trong
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
73.
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
73 chỉ chấp nhận chuỗi

Trong nỗ lực lưu các đối tượng, JavaScript chuyển đổi đối tượng thành một chuỗi. Kết quả là

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
76 đối với các đối tượng và một chuỗi được phân tách bằng dấu phẩy đối với các phần tử mảng

Ví dụ

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
2

Khi các đối tượng được lưu như thế này, việc truy cập chúng trở nên khó khăn. Đối với ví dụ đối tượng, việc truy cập đối tượng như

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
77 sẽ dẫn đến lỗi. Điều này là do hiện tại
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
76 là một chuỗi, không có thuộc tính
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
79

Cách tốt hơn để lưu các đối tượng và mảng trong bộ nhớ cục bộ là sử dụng

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
40 (để chuyển đổi đối tượng thành chuỗi) và
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
41 (để chuyển đổi chuỗi thành đối tượng). Bằng cách này, việc truy cập các đối tượng trở nên dễ dàng

Phiên bản chính xác của đoạn mã trên sẽ là

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
3

Không sử dụng giá trị mặc định

Đặt giá trị mặc định trong các biến động là một phương pháp rất tốt để ngăn ngừa các lỗi không mong muốn. Đây là một ví dụ về một sai lầm phổ biến. .

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
4

Kết quả là

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
42 vì
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
43​ là
const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
22​ và
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
45​ là
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
46. Bằng cách sử dụng các giá trị mặc định, các lỗi như thế này có thể được ngăn chặn. Ví dụ

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
5

Ngoài ra, tính năng giá trị mặc định được giới thiệu trong ES6 có thể được sử dụng như vậy

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
6

Ví dụ này, mặc dù tối thiểu, nhấn mạnh tầm quan trọng của các giá trị mặc định. Ngoài ra, nhà phát triển có thể cung cấp lỗi hoặc thông báo cảnh báo khi giá trị dự kiến ​​không được cung cấp

Đặt tên biến không đúng

Vâng, các nhà phát triển vẫn mắc lỗi này. Đặt tên rất khó, nhưng các nhà phát triển thực sự không có lựa chọn nào khác. Nhận xét là cách thực hành tốt trong lập trình và đặt tên biến cũng vậy

Ví dụ

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
7

Biến

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
47​ thì không sao, nhưng còn
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
48​ hoặc
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
49 thì sao?

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
8

Việc đặt tên biến đúng cách rất quan trọng vì nhà phát triển có thể không bao giờ là nhà phát triển duy nhất trên cơ sở mã tại một thời điểm cụ thể hoặc trong tương lai

Đặt tên biến đúng cách sẽ cho phép những người đóng góp dễ dàng hiểu cách thức hoạt động của một dự án

Kiểm tra các giá trị boolean

const name = "javascript";
if (name == "nodejs") {
    console.log(name);
}
// no output
// OR
if (name === "nodejs") {
    console.log(name);
}
// no output
9

Thực tế phổ biến là kiểm tra các giá trị boolean như đã thấy trong đoạn mã trên. Mặc dù điều này không sao, nhưng đã xảy ra lỗi khi kiểm tra một số giá trị

Trong JavaScript, một phép so sánh lỏng lẻo giữa

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
50​ và
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
51​ trả về
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
52 và
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
53​ và
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
54 trả về
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
52. Điều này có nghĩa là nếu
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
56​ là
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
53​, thì
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
56​ sẽ là
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
52

Đây cũng là lỗi thường mắc phải ở các đối tượng. Ví dụ

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
0

Mặc dù thuộc tính

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
80​ tồn tại, nhưng
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
81​ trả về
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
50, là giá trị
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
83, do đó, khối
function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
84 được thực thi

Vì vậy, trừ khi bạn chắc chắn về phạm vi giá trị sẽ được sử dụng, các giá trị và thuộc tính boolean trong các đối tượng sẽ được kiểm tra như thế này

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
1

Nhầm lẫn bổ sung và nối

Dấu cộng

function callback() {
​​    console.log("I am the first");
​​}
​​setTimeout(callback, 300);
​​console.log("I am the last");
​​// output
​​// I am the last
​​// I am the first
85 có hai chức năng trong JavaScript. cộng và nối. Phép cộng dành cho số và Phép nối dành cho chuỗi. Một số nhà phát triển thường sử dụng sai toán tử này

Ví dụ

const number = "1";
console.log(number == 1);
// true
console.log(number === 1);
// false
2

Khi thêm chuỗi và số, JavaScript sẽ chuyển đổi số thành chuỗi và nối tất cả các giá trị. Để cộng các số, một phép toán được thực hiện. .

Phần kết luận

Tất nhiên, có nhiều lỗi (một số nhỏ, một số nghiêm trọng) hơn những lỗi được liệt kê ở trên. Vì vậy, chỉ cần đảm bảo rằng bạn luôn cập nhật những phát triển trong ngôn ngữ

Nghiên cứu và tránh những sai lầm này sẽ giúp bạn xây dựng các công cụ và ứng dụng web tốt hơn và đáng tin cậy hơn

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Các lỗi phổ biến trong JavaScript là gì?
Dipto Karmakar

[ Kỹ sư phần mềm full-stack. Nhà phát triển phụ trợ. Pythonista ] Tôi thích viết mã bằng python. Trong thời gian rảnh của tôi, tôi đọc sách. Tôi thích học hỏi và trải nghiệm những kỹ năng mới


Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Các loại lỗi khác nhau được hiển thị trong JavaScript là gì?

7 loại lỗi gốc trong JavaScript bạn nên biết. Hiểu các loại lỗi gốc phổ biến trong JavaScript. .
phạm vi lỗi. Điều này được đưa ra khi một số nằm ngoài phạm vi giá trị cho phép. .
Tham khảoLỗi. .
Lỗi cú pháp. .
LoạiLỗi. .
Lỗi URI. .
Đánh giáLỗi. .
Lỗi bên trong

Bốn lỗi lập trình phổ biến mà bạn có thể mắc phải khi viết mã JavaScript là gì?

15 Lỗi JavaScript phổ biến dành cho người mới bắt đầu .
Không trở về từ một chức năng. .
Đang tải tập lệnh JavaScript trong HTML trước khi DOM được tải. .
Gán lại các biến Const. .
Hiểu sai phạm vi biến. .
Các biến được đặt tên kém. .
Tuyên bố khác không cần thiết

Điều gì gây ra lỗi loại trong JavaScript?

TypeError có thể xuất hiện khi. một toán hạng hoặc đối số được truyền cho một hàm không tương thích với loại mà toán tử hoặc hàm đó mong đợi ; . khi cố gắng sửa đổi một giá trị không thể thay đổi; . khi cố gắng sử dụng một giá trị theo cách không phù hợp.