Tìm hiểu cách gỡ lỗi JavaScript bằng trình gỡ lỗi DevTools của trình duyệt
Gỡ lỗi là một trong những kỹ năng cốt lõi đối với hoạt động của một lập trình viên.
Đôi khi chúng tôi làm việc tốt nhất của mình, nhưng chương trình không hoạt động chính xác, chẳng hạn như nó bị lỗi, nó chỉ chậm hoặc nó in sai thông tin.
Bạn làm gì khi một chương trình bạn đã viết không hoạt động như bạn mong đợi?
Bạn bắt đầu gỡ lỗi nó.
Tìm ra lỗi có thể ở đâu
Bước đầu tiên luôn là xem xét những gì đang xảy ra và cố gắng xác định xem vấn đề đến từ đâu. Nó có phải là một vấn đề trong môi trường? Nó có vấn đề trong đầu vào mà bạn đã cung cấp cho chương trình? Nó có phải là sự cố một lần do sử dụng quá nhiều bộ nhớ không? Hay nó đang xảy ra mỗi khi bạn chạy nó?
Đó là tất cả những thông tin quan trọng để bắt đầu đi đúng hướng khi tìm ra một vấn đề.
Khi bạn đã biết được lỗi xuất phát từ đâu, bạn có thể bắt đầu kiểm tra phần mã cụ thể đó.
Đọc mã
Cách đơn giản nhất để gỡ lỗi, ít nhất là về mặt công cụ, là đọc mã bạn đã viết. Nói to. Có một điều kỳ diệu nào đó khi nghe từ chính giọng nói của chúng ta mà không xảy ra khi bạn đọc trong im lặng.
Thường thì tôi thấy có vấn đề theo cách này.
Sử dụng bảng điều khiển
Nếu việc đọc mã không tiết lộ gì cho bạn, bước hợp lý tiếp theo là bắt đầu thêm một vài dòng vào mã của bạn để có thể làm sáng tỏ.
Trong mã giao diện người dùng JavaScript, điều bạn thường làm là sử dụngalert()
vàconsole.log
(và những người bạn tuyệt vời của nó).
Hãy xem xét dòng này:
const a = calculateA()
const b = calculateB()
const result = a + b
Bằng cách nào đó, kết quả không được tính toán chính xác, vì vậy bạn có thể bắt đầu bằng cách thêmalert(a)
vàalert(b)
trước khi tính toán kết quả và trình duyệt sẽ mở hai bảng cảnh báo khi nó thực thi mã.
const a = calculateA()
const b = calculateB()
alert(a)
alert(b)
const result = a + b
Điều này hoạt động tốt nếu những gì bạn đang chuyển đếnalert()
là một chuỗi hoặc một số. Ngay sau khi bạn có một mảng hoặc một đối tượng, mọi thứ bắt đầu quá phức tạp đối vớialert()
và bạn có thể sử dụngAPI bảng điều khiển. Bắt đầu vớiconsole.log()
:
const a = calculateA()
const b = calculateB()
console.log(a)
console.log(b)
const result = a + b
Giá trị được in trong bảng điều khiển JavaScript của các công cụ dành cho nhà phát triển trình duyệt. Để thuận tiện, tôi sẽ giải thích cách gỡ lỗi trong Chrome DevTools tại đây, nhưng các khái niệm chung áp dụng cho tất cả các trình duyệt, với một số khác biệt về các tính năng được hỗ trợ.
Xemtổng quan chi tiết về Công cụ dành cho nhà phát triển của Chrome
Công cụ dành cho nhà phát triển của Chrome
Kết quả củaconsole.log()
lệnh gọi được in ra bảng điều khiển JavaScript. Đây là một công cụ ít nhiều phổ biến cho mọi trình duyệt:
Công cụ này rất mạnh mẽ và cho phép bạn in các đối tượng hoặc mảng phức tạp và bạn có thể kiểm tra mọi thuộc tính của chúng.
bên trongAPI bảng điều khiểnbài đăng bạn có thể thấy tất cả các tùy chọn và chi tiết làm việc với nó, vì vậy tôi không giải thích tất cả các chi tiết ở đây.
Trình gỡ lỗi
Trình gỡ lỗi là công cụ mạnh nhất trong các công cụ dành cho nhà phát triển trình duyệt và nó được tìm thấy trongNguồnbảng điều khiển:
Phần trên cùng của màn hình hiển thị trình điều hướng tệp.
Bạn có thể chọn bất kỳ tệp nào và kiểm tra tệp đó ở bên phải. Điều này rất quan trọng để thiết lập các điểm ngắt, như chúng ta sẽ thấy ở phần sau.
Phần dưới cùng là trình gỡ lỗi thực tế.
Điểm ngắt
Khi trình duyệt tải một trang, mã JavaScript được thực thi cho đến khi đáp ứng một điểm ngắt.
Tại thời điểm này, quá trình thực thi bị tạm dừng và bạn có thể kiểm tra tất cả về chương trình đang chạy của mình.
Bạn có thể kiểm tra các giá trị của biến và tiếp tục thực hiện chương trình từng dòng một.
Nhưng trước tiên, breakpoint là gì? Ở dạng đơn giản, điểm ngắt là mộtbreakpoint
hướng dẫn đặt trong mã của bạn. Khi trình duyệt gặp nó, nó sẽ dừng lại.
Đây là một lựa chọn tốt trong khi phát triển. Một tùy chọn khác là mở tệp trong bảng Nguồn và nhấp vào số trên dòng bạn muốn thêm điểm ngắt:
Nhấp lại vào điểm ngắt sẽ xóa nó.
Sau khi bạn thêm một điểm ngắt, bạn có thể tải lại trang và mã sẽ dừng tại điểm thực thi đó khi nó tìm thấy điểm ngắt.
Khi bạn thêm điểm ngắt, bạn có thể thấy trongĐiểm ngắtbảng điều khiển đóform.js
Trực tuyến7
có điểm ngắt. Bạn có thể thấy tất cả các điểm ngắt của mình ở đó và tạm thời vô hiệu hóa chúng.
Ngoài ra còn có các loại điểm ngắt khác:
- XHR / tìm nạp các điểm ngắt: được kích hoạt khi bất kỳ yêu cầu mạng nào được gửi đi
- Điểm ngắt DOM: được kích hoạt khi phần tử DOM thay đổi
- Điểm ngắt của trình xử lý sự kiện: được kích hoạt khi một số sự kiện xảy ra, chẳng hạn như một cú nhấp chuột
Phạm vi
Trong ví dụ này, tôi đặt một điểm ngắt bên trong trình xử lý sự kiện, vì vậy tôi phải gửi một biểu mẫu để kích hoạt nó:
Bây giờ tất cả các biến trong phạm vi được in, với các giá trị tương ứng của chúng. Bạn có thể chỉnh sửa các biến đó bằng cách nhấp đúp vào chúng.
Xem các biến và biểu thức
Quyền đối vớiPhạm vibảng điều khiển cóĐồng hồ đeo taybảng điều khiển.
Nó có một+
mà bạn có thể sử dụng để thêm bất kỳ biểu thức nào. Ví dụ thêmname
sẽ inname
giá trị biến, trong ví dụFlavio
. Bạn có thể thêmname.toUpperCase()
và nó sẽ inFLAVIO
:
Tiếp tục thực hiện
Bây giờ tất cả các tập lệnh đều bị tạm dừng kể từ khi điểm ngắt dừng thực thi.
Có một tập hợp các nút phía trên biểu ngữ "Bị tạm dừng trên điểm ngắt" cho phép bạn thay đổi trạng thái này.
Đầu tiên là màu xanh lam. Nhấp vào nó sẽ tiếp tục thực thi tập lệnh bình thường.
Nút thứ hai làbước quavà nó tiếp tục thực thi cho đến dòng tiếp theo và dừng lại.
Nút tiếp theo thực hiện mộtbước vàohoạt động: đi vào hàm đang được thực thi, cho phép bạn đi vào chi tiết của nó.
Bước ra khỏilà ngược lại: quay trở lại hàm bên ngoài gọi hàm này.
Đó là những cách chính để kiểm soát luồng trong quá trình gỡ lỗi.
Chỉnh sửa tập lệnh
Từ màn hình devtools này, bạn có thể chỉnh sửa bất kỳ tập lệnh nào, cũng như trong khi tập lệnh bị tạm dừng thực thi. Chỉ cần chỉnh sửa tệp và nhấn cmd-S trên Mac hoặc ctrl-S trên Windows / Linux.
Tất nhiên các thay đổi sẽ không được lưu giữ trên đĩa trừ khi bạn đang làm việc cục bộ và thiết lập không gian làm việc trong devtools, một chủ đề nâng cao hơn.
Kiểm tra ngăn xếp cuộc gọi
Cáccuộc gọi chồngthật tuyệt khi biết bạn hiểu sâu về mã JavaScript có bao nhiêu cấp hàm. Nó cũng cho phép bạn di chuyển lên trong ngăn xếp bằng cách nhấp vào từng tên hàm:
Tập lệnh hộp đen
Thông thường, đôi khi bạn làm việc với các thư viện mà bạn không muốn “bước vào”, bạn tin tưởng chúng và bạn không muốn thấy mã của chúng trong ngăn xếp cuộc gọi chẳng hạn. Giống như trong trường hợp trên chovalidator.min.js
, mà tôi sử dụng để xác thực email.
Tôi tin rằng nó hoạt động tốt, vì vậy tôi có thể nhấp chuột phải vào nó trong ngăn xếp cuộc gọi và nhấnTập lệnh hộp đen. Từ đó trở đi, không thể bước vào mã tập lệnh này và bạn vui vẻ làm việc chỉ trên mã ứng dụng của riêng mình.
Sử dụng devtools của trình duyệt để gỡ lỗi Node.js
Vì Node.js được xây dựng trên cùng một công cụ của Chrome,v8, bạn có thể liên kết 2 và sử dụng Công cụ dành cho nhà phát triển của Chrome để kiểm tra việc thực thi các ứng dụng Node.js.
Mở của bạnthiết bị đầu cuốivà chạy
node --inspect
Sau đó, trong Chrome, nhập URL này:about://inspect
.
Nhấp vào liên kết Mở DevTools dành riêng cho Node bên cạnh Node đích và bạn sẽ có quyền truy cập vào Node.js trong trình duyệt DevTools:
Đảm bảo rằng bạn nhấp vào đó chứ không phải liên kết kiểm tra bên dưới, vì công cụ này sẽ tự động kết nối lại với phiên bản Node.js khi chúng tôi khởi động lại nó - khá tiện dụng!
Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript
Các hướng dẫn js khác:
- Những điều cần tránh trong JavaScript (những phần xấu)
- Trì hoãn và Hứa hẹn trong JavaScript (ví dụ + Ember.js)
- Cách tải tệp lên máy chủ bằng JavaScript
- Kiểu mã hóa JavaScript
- Giới thiệu về Mảng JavaScript
- Giới thiệu về ngôn ngữ lập trình JavaScript
- Hướng dẫn đầy đủ về ECMAScript 2015-2019
- Hiểu những lời hứa về JavaScript
- Cấu trúc Lexical của JavaScript
- Các loại JavaScript
- Các biến JavaScript
- Danh sách các Ý tưởng ứng dụng web mẫu
- Giới thiệu về Lập trình chức năng với JavaScript
- JavaScript không đồng bộ hiện đại với Async và Await
- Các vòng lặp và phạm vi JavaScript
- Cấu trúc dữ liệu JavaScript của bản đồ
- Cấu trúc dữ liệu JavaScript tập hợp
- Hướng dẫn về các chữ mẫu JavaScript
- Lộ trình học JavaScript
- Biểu thức JavaScript
- Khám phá bộ hẹn giờ JavaScript
- Sự kiện JavaScript được giải thích
- Vòng lặp JavaScript
- Viết các vòng lặp JavaScript bằng cách sử dụng bản đồ, lọc, giảm và tìm
- Vòng lặp sự kiện JavaScript
- Các hàm JavaScript
- Bảng chú giải thuật ngữ JavaScript
- JavaScript Closures giải thích
- Hướng dẫn về Hàm mũi tên trong JavaScript
- Hướng dẫn về Cụm từ thông dụng JavaScript
- Cách kiểm tra xem một chuỗi có chứa chuỗi con trong JavaScript hay không
- Cách xóa một mục khỏi Mảng trong JavaScript
- Cách sao chép sâu một đối tượng JavaScript
- Introduction to Unicode and UTF-8
- Unicode trong JavaScript
- Cách viết hoa chữ cái đầu tiên của chuỗi trong JavaScript
- Cách định dạng một số dưới dạng giá trị tiền tệ trong JavaScript
- Cách chuyển đổi một chuỗi thành một số trong JavaScript
- cái này trong JavaScript
- Cách lấy dấu thời gian hiện tại trong JavaScript
- Chế độ nghiêm ngặt của JavaScript
- JavaScript Biểu thức hàm được gọi ngay lập tức (IIFE)
- Cách chuyển hướng đến một trang web khác bằng JavaScript
- Cách xóa thuộc tính khỏi đối tượng JavaScript
- Cách nối một mục vào một mảng trong JavaScript
- Cách kiểm tra xem thuộc tính đối tượng JavaScript có không được xác định hay không
- Giới thiệu về Mô-đun ES
- Giới thiệu về CommonJS
- Lập trình không đồng bộ JavaScript và gọi lại
- Cách thay thế tất cả các lần xuất hiện của một chuỗi trong JavaScript
- Hướng dẫn tham khảo nhanh về Cú pháp JavaScript hiện đại
- Cách cắt số 0 ở đầu một số trong JavaScript
- Cách kiểm tra một đối tượng JavaScript
- Hướng dẫn chính xác về Ngày trong JavaScript
- Hướng dẫn Moment.js
- Dấu chấm phẩy trong JavaScript
- Các toán tử số học JavaScript
- Đối tượng Toán JavaScript
- Tạo chuỗi ngẫu nhiên và duy nhất trong JavaScript
- Cách đặt các hàm JavaScript của bạn ở chế độ ngủ
- Kế thừa nguyên mẫu JavaScript
- Ngoại lệ JavaScript
- Cách sử dụng các lớp JavaScript
- Sách dạy nấu ăn JavaScript
- Trích dẫn bằng JavaScript
- Cách xác thực địa chỉ email trong JavaScript
- Cách lấy các thuộc tính duy nhất của một tập hợp các đối tượng trong một mảng JavaScript
- Cách kiểm tra xem một chuỗi có bắt đầu bằng chuỗi khác trong JavaScript hay không
- Cách tạo chuỗi nhiều dòng trong JavaScript
- Hướng dẫn ES6
- Cách lấy URL hiện tại trong JavaScript
- Hướng dẫn ES2016
- Cách khởi tạo một mảng mới với các giá trị trong JavaScript
- Hướng dẫn ES2017
- Hướng dẫn ES2018
- Cách sử dụng Async và Await với Array.prototype.map ()
- Không đồng bộ so với mã đồng bộ
- Cách tạo một số ngẫu nhiên giữa hai số trong JavaScript
- Hướng dẫn sử dụng HTML Canvas API
- Cách lấy chỉ mục của một lần lặp trong vòng lặp for-of trong JavaScript
- Ứng dụng một trang là gì?
- Giới thiệu về WebAssembly
- Giới thiệu về JSON
- Hướng dẫn JSONP
- Should you use or learn jQuery in 2020?
- Cách ẩn một phần tử DOM bằng JavaScript thuần túy
- Cách hợp nhất hai đối tượng trong JavaScript
- Cách làm trống một mảng JavaScript
- Cách mã hóa URL bằng JavaScript
- Cách đặt giá trị tham số mặc định trong JavaScript
- Cách sắp xếp một mảng đối tượng theo giá trị thuộc tính trong JavaScript
- Cách đếm số lượng thuộc tính trong một đối tượng JavaScript
- call () và apply () trong JavaScript
- Giới thiệu về PeerJS, thư viện WebRTC
- Làm việc với các đối tượng và mảng bằng Rest and Spread
- Hủy cấu trúc các đối tượng và mảng trong JavaScript
- Hướng dẫn cuối cùng để gỡ lỗi JavaScript
- Hướng dẫn TypeScript
- Tự động chọn một phương thức của một đối tượng trong JavaScript
- Chuyển không xác định sang JavaScript Biểu thức hàm được gọi ngay lập tức
- Ngôn ngữ được gõ nhẹ so với ngôn ngữ được gõ mạnh
- Cách tạo kiểu các phần tử DOM bằng JavaScript
- Truyền trong JavaScript
- Hướng dẫn tạo JavaScript
- Kích thước thư mục node_modules không phải là vấn đề. Đó là một đặc ân
- Cách giải quyết lỗi số nhận dạng không mong muốn khi nhập mô-đun trong JavaScript
- Cách liệt kê tất cả các phương thức của một đối tượng trong JavaScript
- Phương thức String Replace ()
- Phương thức tìm kiếm chuỗi ()
- Cách tôi chạy các đoạn mã JavaScript nhỏ
- Hướng dẫn ES2019
- Phương thức chuỗi charAt ()
- Phương thức chuỗi charCodeAt ()
- Phương thức String codePointAt ()
- Phương thức String concat ()
- Phương thức String endWith ()
- Phương thức String include ()
- Phương thức String indexOf ()
- Phương thức String lastIndexOf ()
- Phương thức String localeCompare ()
- Phương thức String match ()
- Phương thức String normalize ()
- Phương thức String padEnd ()
- Phương thức String padStart ()
- Phương thức lặp lại chuỗi ()
- Phương thức String Slice ()
- Phương thức String split ()
- Phương thức String startedWith ()
- Phương thức String substring ()
- Phương thức String toLocaleLowerCase ()
- Phương thức String toLocaleUpperCase ()
- Phương thức String toLowerCase ()
- Phương thức String toString ()
- Phương thức String toUpperCase ()
- Phương thức String trim ()
- Phương thức String trimEnd ()
- Phương thức String trimStart ()
- Ghi nhớ trong JavaScript
- Phương thức String valueOf ()
- Tham khảo JavaScript: Chuỗi
- Phương thức Number isInteger ()
- Phương thức Number isNaN ()
- Phương thức Number isSafeInteger ()
- Phương thức Number parseFloat ()
- Phương thức Number parseInt ()
- Phương thức Number toString ()
- Phương thức Number valueOf ()
- Phương thức Number toPre precision ()
- Phương thức Number toExponential ()
- Phương thức Number toLocaleString ()
- Phương thức Number toFixed ()
- Phương thức Number isFinite ()
- Tham chiếu JavaScript: Số
- Bộ mô tả thuộc tính JavaScript
- Phương thức gán đối tượng ()
- Phương thức đối tượng create ()
- Phương thức Object defineProperties ()
- Phương thức Object defineProperty ()
- Phương thức Object entry ()
- Phương thức đông cứng đối tượng ()
- Phương thức Object getOwnPropertyDescriptor ()
- Phương thức Object getOwnPropertyDescriptors ()
- Phương thức Object getOwnPropertyNames ()
- Phương thức Object getOwnPropertySymbols ()
- Phương thức Object getPrototypeOf ()
- Phương thức Object is ()
- Phương thức Object isExtensible ()
- Phương thức Object isFrozen ()
- Phương thức Object isSealed ()
- Phương thức Object key ()
- Phương thức Object PreventExtensions ()
- Phương thức Object seal ()
- Phương thức Object setPrototypeOf ()
- Phương thức Object giá trị ()
- Phương thức Object hasOwnProperty ()
- Phương thức Object isPrototypeOf ()
- Phương thức Object propertyIsEnumerable ()
- Phương thức Object toLocaleString ()
- Phương thức Object toString ()
- Phương thức Object valueOf ()
- Tham chiếu JavaScript: Đối tượng
- Toán tử gán JavaScript
- Quốc tế hóa JavaScript
- Toán tử typeof JavaScript
- JavaScript Toán tử mới
- Toán tử so sánh JavaScript
- Quy tắc ưu tiên toán tử JavaScript
- Toán tử instanceof JavaScript
- Câu lệnh JavaScript
- Phạm vi JavaScript
- Chuyển đổi loại JavaScript (truyền)
- Các toán tử bình đẳng trong JavaScript
- JavaScript có điều kiện if / else
- Điều kiện chuyển đổi JavaScript
- Toán tử xóa JavaScript
- Tham số hàm JavaScript
- Toán tử Spread JavaScript
- Giá trị trả lại của JavaScript
- Toán tử logic JavaScript
- Toán tử bậc ba của JavaScript
- Đệ quy JavaScript
- Thuộc tính đối tượng JavaScript
- Đối tượng lỗi JavaScript
- Đối tượng toàn cầu JavaScript
- Hàm filter JavaScript ()
- Hàm map JavaScript ()
- Hàm Reduce () trong JavaScript
- Toán tử JavaScript `in`
- Toán tử JavaScript
- Cách nhận giá trị của thuộc tính CSS trong JavaScript
- Cách thêm trình xử lý sự kiện vào nhiều phần tử trong JavaScript
- Trường lớp riêng trong JavaScript
- Cách sắp xếp mảng theo giá trị ngày trong JavaScript
- Trường lớp công khai JavaScript
- Ký hiệu JavaScript
- Cách sử dụng thư viện bcrypt JavaScript
- Cách đổi tên các trường khi sử dụng cấu trúc đối tượng
- Cách kiểm tra các loại trong JavaScript mà không cần sử dụng TypeScript
- Cách kiểm tra xem một mảng JavaScript có chứa một giá trị cụ thể hay không
- Toán tử phủ định kép là gì !! làm trong JavaScript?
- Toán tử bình đẳng nào nên được sử dụng trong so sánh JavaScript? == so với ===
- JavaScript có còn đáng học không?
- Cách trả về kết quả của một hàm không đồng bộ trong JavaScript
- Cách kiểm tra xem một đối tượng có trống trong JavaScript hay không
- Cách thoát khỏi vòng lặp for trong JavaScript
- Cách thêm mục vào một mảng tại một chỉ mục cụ thể trong JavaScript
- Tại sao bạn không nên sửa đổi nguyên mẫu đối tượng JavaScript
- Sự khác biệt giữa sử dụng let và var trong JavaScript là gì?
- Các liên kết được sử dụng để kích hoạt các hàm JavaScript
- Cách nối hai chuỗi trong JavaScript
- Cách nối hai mảng trong JavaScript
- Làm cách nào để kiểm tra xem một giá trị JavaScript có phải là một mảng hay không?
- Làm cách nào để lấy phần tử cuối cùng của một mảng trong JavaScript?
- Cách gửi dữ liệu được mã hóa urlencom bằng Axios
- Cách lấy ngày mai bằng JavaScript
- Cách lấy ngày hôm qua bằng JavaScript
- Cách lấy tên tháng từ ngày JavaScript
- Cách kiểm tra xem hai ngày có phải là cùng một ngày hay không trong JavaScript
- Cách kiểm tra xem một ngày có đề cập đến một ngày trong quá khứ trong JavaScript hay không
- Câu lệnh có nhãn JavaScript
- Cách chờ 2 hoặc nhiều lời hứa giải quyết trong JavaScript
- Cách lấy ngày giữa 2 ngày trong JavaScript
- Cách tải tệp lên bằng Tìm nạp
- Cách định dạng ngày trong JavaScript
- Cách lặp qua các thuộc tính đối tượng trong JavaScript
- Cách tính số ngày giữa 2 ngày trong JavaScript
- Cách sử dụng mức cao nhất đang chờ đợi trong Mô-đun ES
- Nhập động JavaScript
- Chuỗi tùy chọn JavaScript
- Cách thay thế khoảng trắng bên trong một chuỗi trong JavaScript
- JavaScript Nullish Coalescing
- Cách làm phẳng một mảng trong JavaScript
- Thập kỷ này trong JavaScript
- Cách gửi tiêu đề ủy quyền bằng Axios
- Danh sách các từ khóa và các từ dành riêng trong JavaScript
- Làm thế nào để chuyển đổi một mảng thành một chuỗi trong JavaScript
- Cách xóa tất cả nội dung thư mục node_modules
- Cách xóa các bản sao khỏi một mảng JavaScript
- Let vs Const trong JavaScript
- Cùng một lệnh gọi API POST trong các thư viện JavaScript khác nhau
- Cách lấy n mục đầu tiên trong một mảng trong JS
- Cách chia mảng thành nhiều phần bằng nhau trong JS
- Cách làm chậm vòng lặp trong JavaScript
- Cách tải hình ảnh trong canvas HTML
- Cách cắt một chuỗi thành các từ trong JavaScript
- Cách chia một nửa mảng trong JavaScript
- Cách viết văn bản vào HTML canvas
- Cách xóa ký tự cuối cùng của chuỗi trong JavaScript
- Cách xóa ký tự đầu tiên của chuỗi trong JavaScript
- Cách sửa lỗi TypeError: Không thể gán chỉ đọc thuộc tính 'xuất' của đối tượng '# & lt; Đối tượng & gt;' lỗi
- Cách tạo cửa sổ bật lên ý định thoát
- Cách kiểm tra xem một phần tử có phải là con của phần tử khác hay không
- Cách buộc thông tin đăng nhập cho mọi yêu cầu Axios
- Cách giải quyết lỗi "không phải là một hàm" trong JavaScript
- Gatsby, cách thay đổi biểu tượng yêu thích
- Tải tệp JS bên ngoài bằng Gatsby
- Cách phát hiện chế độ tối bằng JavaScript
- Bưu kiện, cách sửa lỗi `RegeneratorRuntime không được xác định`
- Cách phát hiện xem Adblocker có đang được sử dụng với JavaScript hay không
- Cấu trúc đối tượng với các kiểu trong TypeScript
- Sổ tay Deno: giới thiệu ngắn gọn về Deno 🦕
- Cách lấy phân đoạn cuối cùng của đường dẫn hoặc URL bằng JavaScript
- Cách xáo trộn các phần tử trong một mảng JavaScript
- Cách kiểm tra xem khóa có tồn tại trong đối tượng JavaScript hay không
- Sự kiện sôi sục và chụp sự kiện
- event.stopPropagation so với event.preventDefault () so với return false trong các sự kiện DOM
- Loại nguyên thủy so với đối tượng trong JavaScript
- Làm thế nào bạn có thể biết loại giá trị là gì, trong JavaScript?
- Cách trả về nhiều giá trị từ một hàm trong JavaScript
- Hàm mũi tên so với hàm thông thường trong JavaScript
- Chúng ta có thể truy cập giá trị thuộc tính của một đối tượng bằng những cách nào?
- Sự khác biệt giữa null và undefined trong JavaScript là gì?
- Sự khác biệt giữa một phương thức và một hàm là gì?
- Những cách chúng ta có thể thoát khỏi vòng lặp trong JavaScript là gì?
- Vòng lặp for..of của JavaScript
- Hủy cấu trúc đối tượng trong JavaScript là gì?
- Hosts trong JavaScript là gì?
- Cách đổi dấu phẩy thành dấu chấm bằng JavaScript
- Tầm quan trọng của thời gian khi làm việc với DOM
- Cách đảo ngược một mảng JavaScript
- Cách kiểm tra xem một giá trị có phải là một số trong JavaScript hay không
- Cách chấp nhận các tham số không giới hạn trong một hàm JavaScript
- Đối tượng proxy JavaScript
- Ủy quyền sự kiện trong trình duyệt sử dụng JavaScript vani
- Siêu từ khóa JavaScript
- Giới thiệu về XState
- Các giá trị được truyền bằng tham chiếu hay theo giá trị trong JavaScript?
- Sự kiện tùy chỉnh trong JavaScript
- Lỗi tùy chỉnh trong JavaScript
- Không gian tên trong JavaScript
- Một cách sử dụng kỳ lạ của dấu phẩy trong JavaScript
- Chuỗi cuộc gọi phương thức trong JavaScript
- Cách xử lý lời hứa từ chối
- Cách hoán đổi hai phần tử mảng trong JavaScript
- Cách tôi sửa lỗi "cb.apply không phải là chức năng" khi sử dụng Gitbook
- Cách thêm một mục vào đầu một mảng trong JavaScript
- Gatsby, sửa lỗi "không thể tìm thấy mô-đun gatsby-cli / lib / report"
- Cách lấy chỉ mục của một mục trong một mảng JavaScript
- Cách kiểm tra đối tượng trống trong JavaScript
- Cách cấu trúc một đối tượng thành các biến hiện có trong JavaScript
- Cấu trúc dữ liệu JavaScript của mảng
- Cấu trúc dữ liệu JavaScript ngăn xếp
- Cấu trúc dữ liệu JavaScript: Hàng đợi
- Cấu trúc dữ liệu JavaScript: Đặt
- Cấu trúc dữ liệu JavaScript: Từ điển
- Cấu trúc dữ liệu JavaScript: Danh sách được liên kết
- JavaScript, cách xuất một hàm
- JavaScript, cách xuất nhiều hàm
- JavaScript, cách thoát một hàm
- JavaScript, cách tìm một ký tự trong một chuỗi
- JavaScript, cách lọc một mảng
- JavaScript, cách mở rộng một lớp
- JavaScript, cách tìm các bản sao trong một mảng
- JavaScript, cách thay thế một mục của một mảng
- Thuật toán JavaScript: Tìm kiếm tuyến tính
- Thuật toán JavaScript: Tìm kiếm nhị phân
- Thuật toán JavaScript: Sắp xếp lựa chọn
- Thuật toán JavaScript: Quicksort
- Thuật toán JavaScript: Sắp xếp hợp nhất
- Thuật toán JavaScript: Sắp xếp bong bóng