Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

JavaScript SyntaxError: missing ) after argument list – Giải pháp

JavaScript dựa vào dấu ngoặc để biết nơi bắt đầu và kết thúc của lời gọi hàm (function calls). Nếu bạn bỏ lỡ một phần cú pháp trước khi hàm đóng, bạn sẽ gặp lỗi "SyntaxError: missing ) after argument list".

Hướng dẫn này khám phá lỗi này có nghĩa là gì và tại sao nó được ném ra. Chúng ta sẽ đi qua một ví dụ về vấn đề này để bạn học những gì cần biết để sửa vấn đề.

SyntaxError: missing ) after argument list

Thông báo "missing ) after argument list" cho chúng ta biết có lỗi cú pháp bên trong một lời gọi hàm.

Điều này có thể xảy ra nếu bạn thêm dấu phẩy ở cuối danh sách đối số không được theo sau bởi đối số khác.

JavaScript mong đợi một đối số khác sau mỗi dấu phẩy. Nếu JavaScript không tìm thấy đối số khác, mã của bạn không thể được parse (phân tích) thành công và dấu ngoặc đơn đóng sẽ ném ra syntax error.

Một nguyên nhân tiềm năng khác cho giải pháp này là bao đóng dấu phẩy bạn cần để tách đối số trong hàm bên trong một chuỗi (string).

Nếu bạn gặp lỗi này, hãy đọc kỹ toàn bộ cú pháp trong mã mà lỗi JavaScript trỏ tới. Đảm bảo tất cả dấu ngoặc của bạn khớp nhau và bạn đã dùng dấu phẩy đúng cách bên trong lời gọi hàm.

Ví dụ minh họa

Chúng ta sẽ viết chương trình tính xem sinh viên có đỗ hay trượt bài kiểm tra. Để bắt đầu, định nghĩa điểm số sinh viên đạt được và một thông báo chúng ta sẽ in ra console cho biết sinh viên đỗ hay trượt:

var grade = 57; 
var message = "This student has X their test.";

Biến JavaScript "message" bao gồm chữ cái placeholder X. Chúng ta sẽ thay thế này bằng "passed" hoặc "failed" sau trong chương trình.

Nếu điểm của sinh viên trên 53, họ đỗ. Ngược lại, họ trượt.

Bây giờ chúng ta đã định nghĩa điểm sinh viên, chúng ta có thể tính xem họ đỗ hay trượt. Để làm vậy, chúng ta dùng câu lệnh if:

if (grade > 53) { 
  message.replace("X," "passed"); 
} else { 
  message.replace("X", "failed"); 
}

Chúng ta dùng một câu lệnh if và một else để đánh giá sinh viên đỗ hay trượt. Nếu câu lệnh if đánh giá true, giá trị "X" trong chuỗi "message" trở thành "passed"; ngược lại, giá trị "X" trở thành "failed".

Bây giờ chúng ta đã viết thông báo cho biết sinh viên đỗ hay trượt, chúng ta có thể in thông báo đó ra JavaScript console:

console.log(message);

Hãy chạy mã và xem điều gì xảy ra:

Uncaught SyntaxError: missing ) after argument list

Mã của chúng ta trả về syntax error.

Giải pháp

JavaScript không thể đánh giá mã của chúng ta vì chúng ta đã mắc lỗi bên trong một lời gọi hàm. Chúng ta biết điều này vì argument lists (danh sách đối số) tồn tại trong lời gọi hàm.

Hãy xem lời gọi hàm của chúng ta:

message.replace("X," "passed"); 
message.replace("X", "failed");

Mặc dù câu lệnh thứ hai có vẻ đúng cú pháp, câu lệnh thứ nhất chứa lỗi. Chúng ta đã thêm dấu phẩy bên trong chuỗi đầu tiên thay vì sau chuỗi đầu tiên. Chú ý câu lệnh "X," trong lời gọi replace() đầu tiên.

Điều này khiến argument list của chúng ta chứa hai giá trị xuất hiện liên tiếp nhau. Đây là cú pháp không đúng. Các đối số phải được tách bằng dấu phẩy.

Để sửa lỗi này, chúng ta sẽ di chuyển dấu phẩy từ bên trong chuỗi "X," ra ngoài chuỗi:

message.replace("X", "passed");

Chúng ta đã di chuyển dấu phẩy ra khỏi chuỗi. Hãy chạy mã và xem có hoạt động không.

Mã của chúng ta trả về:

"This student has passed their test."

Mã đã thực thi thành công!

Kết luận

Lỗi "SyntaxError: missing ) after argument list" được ném nếu lời gọi hàm không thể đánh giá đúng. Để sửa lỗi này, hãy đảm bảo đối số của bạn được định dạng đúng. Kiểm tra kỹ rằng tất cả đối số trong lời gọi hàm được tách bằng dấu phẩy.

Bây giờ bạn đã có kiến thức cần thiết để sửa syntax error này như chuyên gia!