Tất nhiên, mã sẽ không chạy, nhưng chúng tôi có thể điền vào chỗ trống và yên tâm hơn rằng cú pháp và cấu trúc của chúng tôi là chính xác hoặc gần như vậy. Tôi thích gọi nó là giàn giáo hoặc ngăn chặn khi cả hai thuật ngữ này đồng nghĩa với nhau về mặt này. Chúng tôi bắt đầu với một bản phác thảo, sau đó bắt đầu tô bóng
Vì vậy, tôi đang ở phần cuối cùng trong phần đầu tiên của JavaScript và tôi liên tục gặp phải lỗi này
“Rất tiếc, hãy thử lại. Kiểm tra xem dấu ngoặc nhọn của bạn có đúng không. Cái ở dòng 2 có thể thiếu dấu ngoặc nhọn. ”
vì vậy tôi đã thử di chuyển các dấu ngoặc và điều chỉnh chúng. Đây là Mã của tôi
// Not sure where to begin? Check the Hint!
if [ 9 * 2 === 18 ] { do 2+2 } other { do console. log[“Không có gì”; }
Thiếu ngoại lệ JavaScript này } sau thân hàm xảy ra nếu có bất kỳ lỗi cú pháp nào trong khi tạo một hàm ở đâu đó trong mã. Đóng dấu ngoặc nhọn/dấu ngoặc đơn phải sai thứ tự
Thông điệp
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]
Loại lỗi
SyntaxError
Nguyên nhân lỗi. Ở đâu đó trong mã, có lỗi khi viết cú pháp cho một hàm trong tập lệnh
Ngoại lệ JavaScript "thiếu } sau thân hàm" xảy ra khi có lỗi cú pháp khi tạo một hàm ở đâu đó. Kiểm tra xem có bất kỳ dấu ngoặc nhọn hoặc dấu ngoặc đơn nào theo đúng thứ tự không
Thông điệp
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]
loại lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };6
Có chuyện gì?
Có một lỗi cú pháp khi tạo một chức năng ở đâu đó. Đồng thời kiểm tra xem có bất kỳ dấu ngoặc nhọn hoặc dấu ngoặc đơn nào theo đúng thứ tự không. Thụt lề hoặc định dạng mã đẹp hơn một chút cũng có thể giúp bạn nhìn xuyên rừng
ví dụ
Quên đóng dấu ngoặc nhọn
Thông thường, thiếu một dấu ngoặc nhọn trong mã chức năng của bạn
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };
đúng sẽ là
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; } };
Nó có thể khó hiểu hơn khi sử dụng IIFE, Đóng cửa hoặc các cấu trúc khác sử dụng nhiều dấu ngoặc đơn và dấu ngoặc nhọn khác nhau, chẳng hạn
const list = [1, 2, const instruments = [ 'Ukulele', 'Guitar', 'Piano' }; const data = [{ foo: 'bar' } { bar: 'foo' }];
đúng sẽ là
const list = [1, 2]; const instruments = [ 'Ukulele', 'Guitar', 'Piano' ]; const data = [{ foo: 'bar' }, { bar: 'foo' }];
Tiếp theo trong cuộc phiêu lưu của chúng ta qua loạt bài Xử lý lỗi JavaScript, chúng ta sẽ xem xét lỗi JavaScript
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7. Như chính cái tên đã ngụ ý trực tiếp, lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 được đưa ra khi một mảng được khởi tạo với cú pháp không chính xác, chẳng hạn như thiếu dấu ngoặc đóng [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };9] hoặc dấu phẩy [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; } };0]
Trong bài viết này, chúng ta sẽ khám phá lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 chi tiết hơn, bao gồm vị trí của nó trong hệ thống phân cấp
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
1 của JavaScript, cùng với một số ví dụ về nguyên nhân có thể gây ra lỗi var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 trong mã của bạn. Chúng ta hãy crackin'
Tóm tắt kỹ thuật
- Tất cả các đối tượng lỗi JavaScript đều là hậu duệ của đối tượng
3 hoặc một đối tượng được kế thừa trong đó["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
- Đối tượng
4 được kế thừa từ đối tượng["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
3["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
- Lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };
7 là một loại đối tượng cụ thể của
4["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
Khi nào bạn nên sử dụng nó?
Để hiểu điều gì có thể gây ra lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7, trước tiên chúng ta cần hiểu cách các đối tượng
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 trong JavaScript hoạt động. Cụ thể, chúng ta cần biết cách SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]40 được định dạng đúng, về mặt cú pháp, để sau đó chúng ta có thể thấy cú pháp không đúng sẽ dẫn đến lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 như thế nào
JavaScript
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]40 là danh sách dữ liệu đơn giản và có thể được khởi tạo theo một số cách khác nhau. Ở đây chúng tôi sử dụng ba phương pháp hơi khác nhau để tạo ra cùng một giá trị 5 giá trị
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]7
Như mong đợi, đầu ra là ba
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]40 khác nhau nhưng giống hệt nhau với cùng các giá trị________số 8
Cho đến nay, phương pháp nội tuyến để tạo một
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 mới bằng cách sử dụng các dấu ngoặc xung quanh [SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]46] là phương pháp phổ biến nhất và do đó, đó là nguồn gốc của tên lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 của chúng tôi
Hãy lấy ví dụ ban đầu tương tự ở trên và xem điều gì sẽ xảy ra nếu chúng ta bỏ qua dấu ngoặc đóng cuối cùng [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };9]
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]4
Khi nó xảy ra, lỗi kết quả hơi khác nhau tùy thuộc vào công cụ trình duyệt
SyntaxError3
Sự khác biệt này trong cách công cụ JavaScript của trình duyệt phân tích cú pháp và do đó báo cáo lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 khá thú vị
Chrome nhận thấy rằng
SyntaxError30
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 đang được khởi tạo và xác định, đồng thời Chrome sẽ kết thúc SyntaxError32 và mong đợi một trong số ít các ký tự có thể có
- Dấu phẩy [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; } };
0] để chỉ ra một mục khác trong
9["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
- Dấu ngoặc đóng [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };
9] để cho biết quá trình khởi tạo
9 đã hoàn tất["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
- Hoặc, một loại
SyntaxError
37 nào đó để chỉ ra rằng các giá trị bổ sung [ngoài chuỗiSyntaxError
32 đầu tiên của chúng tôi] nên được coi là một phần của giá trị mục
9 cụ thể này, chẳng hạn như dấu cộng [["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]
20] để nối nó với một giá trị khác [SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]
21]
Trong trường hợp cụ thể này, Chrome thấy rằng ký tự tiếp theo là dấu chấm phẩy [
SyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]22], đây không phải là cách hợp lệ để hoàn tất quá trình khởi tạo của
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 này và do đó Chrome đưa ra lỗi cho biết như vậyTrong khi đó, công cụ JavaScript của Firefox kém tinh tế hơn. Mặc dù trình phân tích cú pháp cơ bản nhận ra rằng bất kỳ loại ký tự nào ở trên đều hoàn toàn hợp lệ để tuân theo giá trị
SyntaxError32 của chúng tôi, Firefox cho chúng tôi biết rõ ràng rằng dấu ngoặc đóng [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };9] là thứ bị thiếu. Mặc dù lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 cụ thể mà Firefox báo cáo cho chúng tôi biết rằng có vấn đề về cú pháp khi xác định
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 của chúng tôi, nhưng nó không chính xác về mặt kỹ thuật vì một ký tự khác, bên cạnh dấu ngoặc đóng [var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };9], có thể xuất hiện ở đó và hoàn toàn hợp lệ. Về lâu dài, điều đó không quan trọng lắm, nhưng những khác biệt này hơi thú vị
Một nguyên nhân tiềm ẩn khác gây ra lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7 khi tạo một
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 mới là khi chúng tôi thiếu dấu phân cách bằng dấu phẩy giữa nhiều giá trịSyntaxError: Expected '}' [Edge] SyntaxError: missing } after function body [Firefox]2
Cũng giống như trước đây, có sự khác biệt rõ rệt giữa các trình duyệt khác nhau khi báo cáo lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };0
Một lần nữa, Chrome nhận ra sự phức tạp của cú pháp hơn một chút, nhận thấy rằng có hai chuỗi trong "phần tử" đại diện cho một giá trị duy nhất của
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 của chúng tôi, nhưng không có SyntaxError37 để chỉ ra hành động cần thực hiện đối với cả hai giá trị chuỗi [ . Do đó, Chrome báo cáo rằng chuỗi thứ hai của
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };04 là
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };05
Trong khi đó, Firefox một lần nữa lại đưa ra lỗi
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };7, mặc dù có một dấu ngoặc đóng [
var charge = function[] { if [sunny] { useSolarCells[]; } else { promptBikeRide[]; };9] ở cuối định nghĩa
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
["Alice", "Bob", "Chris", "Danielle", "Elizabeth"]
9 của chúng tôiĐể tìm hiểu sâu hơn về cách các ứng dụng của bạn xử lý Lỗi JavaScript, hãy xem công cụ theo dõi lỗi JavaScript Airbrake mang tính cách mạng để có các cảnh báo theo thời gian thực và thông tin chi tiết tức thời về lỗi xảy ra với mã JavaScript của bạn