Sự khác biệt giữa chuyển đổi loại và ép buộc loại trong javascript
Loại ép buộc, loại chuyển đổi, loại typecasting, và loại tung hứng. tất cả các tên khác nhau đề cập đến quá trình chuyển đổi một loại dữ liệu thành một loại dữ liệu khác. Quá trình này có mặt trong hầu hết mọi ngôn ngữ lập trình và là một khái niệm quan trọng trong khoa học máy tính Show
Mặc dù JavaScript được biết đến là một trong những ngôn ngữ lập trình dễ dàng nhất cho người mới bắt đầu, nhưng nó cũng có thể trở nên khó chịu khi các nhà phát triển mong đợi JavaScript làm một việc và nó lại trả về một việc khác. Và mặc dù tiêu chuẩn Đặc tả ngôn ngữ ECMAScript có sẵn cho các nhà phát triển để giúp hướng dẫn họ giải quyết các vấn đề này, nhưng việc không đọc và hiểu tiêu chuẩn đặc tả có thể gây ra nhiều thất vọng hơn khi xử lý việc ép buộc kiểu trong JavaScript Kiểu ép buộc trong JavaScript là một ví dụ về cách ngôn ngữ này có thể tạo ra kết quả không mong muốn khi chúng ta không biết chính xác cách thức hoạt động của nó. Tất cả những ai đã chạm vào dù chỉ một chút mã trong JavaScript đều có thể liên tưởng rằng việc ép kiểu có thể phức tạp Mặc dù các ví dụ về mã mà chúng tôi trình bày trong bài viết này có vẻ giống như các lỗi mà bản cập nhật phiên bản có thể khắc phục, nhưng lý do chúng tôi xem xét lý do tại sao tính năng cưỡng chế kiểu lại hoạt động như vậy là do nhiều sản phẩm và mã kế thừa phụ thuộc vào các phiên bản JavaScript cũ hơn Điều này có nghĩa là việc tạo ra các thay đổi đối với ngôn ngữ có thể phá vỡ các sản phẩm và mã kế thừa, và thay vào đó, chúng ta phải tìm hiểu cách điều hướng các quy tắc ép buộc kiểu Trong bài đăng này, chúng tôi sẽ đề cập đến các loại trong JavaScript và cách sử dụng kiểu ép buộc, giúp chúng tôi lập trình thành công Các loại trong JavaScriptChúng ta có thể coi JavaScript là một ngôn ngữ chưa định kiểu, có nghĩa là nó không có kiểu tĩnh. Tuy nhiên, lầm tưởng phổ biến rằng JavaScript không có loại là sai JavaScript có bảy loại nguyên thủy
Tuy nhiên, các biến trong JavaScript không có loại. Bất cứ khi nào chúng ta sử dụng toán tử 2 để trả về một loại biến, chúng ta sẽ trả về loại giá trị của biến đóBây giờ chúng ta đã làm sáng tỏ một vài quan niệm sai lầm về JavaScript và các loại, chúng ta có thể tìm hiểu thêm về ép buộc loại và cách nó hoạt động trong JavaScript Loại cưỡng chếLoại ép buộc trong JavaScript chỉ ép buộc đối với các loại nguyên thủy 7, 8 và 9. Không có cách nào trong JavaScript để ép buộc một loại giá trị thành 6 hoặc 7JavaScript có hai hình thức cưỡng chế đặc trưng. ép buộc ngầm và ép buộc rõ ràng Ép buộc tiềm ẩn xảy ra khi JavaScript ép buộc loại giá trị thành loại mong đợi dưới mui xe. Kiểu ép buộc này xảy ra mà nhà phát triển không nhận thấy Hơn 200 nghìn nhà phát triển sử dụng LogRocket để tạo ra trải nghiệm kỹ thuật số tốt hơnTìm hiểu thêm →Ép buộc rõ ràng xảy ra khi chúng ta muốn ép buộc loại giá trị thành một loại cụ thể. Hầu hết thời gian, sự ép buộc rõ ràng trong JavaScript xảy ra bằng cách sử dụng các hàm tích hợp như 8, 9 và 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"0 Khi chúng tôi cố gắng tạo các hoạt động trong JavaScript bằng cách sử dụng các loại giá trị khác nhau, JavaScript sẽ ép buộc các loại giá trị cho chúng tôi một cách ngầm định Đây là một trong những lý do tại sao các nhà phát triển có xu hướng tránh sự ép buộc ngầm trong JavaScript. Hầu hết thời gian chúng tôi nhận được kết quả không mong muốn từ hoạt động nếu chúng tôi không biết chính xác cách JavaScript ép buộc các loại giá trị Ép buộc ngầm không tệ như các nhà phát triển thường nghĩ, và trên thực tế, rất hữu ích để viết mã dễ đọc nhưng hiệu quả. Chìa khóa để hiểu đúng cách thức hoạt động của tính năng ép buộc ngầm trong JavaScript là hiểu những gì nó đang thực hiện bên trong Con sốCó nhiều cách có thể để ép buộc một kiểu nguyên thủy thành một số. Hàm 9 ép buộc loại giá trị chuyển đến hàm, sau đó chuyển đến một số. Khi một loại không thể bị ép buộc thành một số, kết quả trả về là 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"2 Hãy xem xét một số ví dụ về ép buộc rõ ràng bằng cách sử dụng hàm 9 1Chúng ta có thể thấy rõ một số kết quả rõ ràng và bất ngờ. Chuyển đổi 1 thành một số trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"5 trong khi chuyển đổi 0 thành một số trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"2. Cả hai hoạt động sẽ trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"2 vì cả hai loại giá trị rõ ràng không phải là số hợp lệ Chuyển đổi một chuỗi rỗng thành một số trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"5. Đây là một phần kỳ lạ khác của JavaScript vì loại giá trị này rõ ràng không phải là một số hợp lệ nhưng nó vẫn chuyển đổi thành 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"5 Các bài viết hay khác từ LogRocket
Kyle Simpson, tác giả của bộ sách You Don't Know JS, cho biết: “Chuỗi rỗng trở thành 0 là gốc rễ của mọi tội ác cưỡng chế. ” Mặc dù kết quả mà chúng ta nhận được từ hàm 9 có vẻ ngoài dự kiến, nhưng đặc tả ECMAScript nêu rõ những khác biệt này. Nhưng nếu không đọc đặc tả ECMA, các nhà phát triển có thể không nhận ra đây chính là cách JavaScript được viếtTrong ví dụ đầu tiên của chúng tôi, chúng tôi đã nhận được các kết quả khác nhau cho 1 và 0. Đặc tả ECMAScript Hàm 9 với loại giá trị null, nó trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"5 và bất cứ khi nào chúng ta sử dụng cùng một hàm với 0, nó sẽ trả về 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"2 18 là tên chuyển đổi loại mà đặc tả ECMAScript sử dụng khi đề cập đến một hoạt động trong đó một giá trị chuyển đổi thành một số. 9 là một đối tượng bao bọc nguyên thủy trong JavaScript chuyển đổi một giá trị thành một số. Điều này cũng tương tự với 30, mà chúng tôi sẽ đề cập sauDưới đây là danh sách các đối số và kết quả mà hoạt động 18 chuyển đổi chúng thànhTrong ví dụ khác của chúng tôi, chúng tôi đã sử dụng hàm 9 với một chuỗi trống và nhận được một 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"5. Đây cũng là điều rõ ràng trong đặc tả ECMAScript
ChuỗiĐể ép buộc một giá trị cho một chuỗi trong JavaScript một cách rõ ràng, chúng ta có thể sử dụng hàm 8. Để hoàn toàn ép buộc một giá trị cho một chuỗi, chúng ta có thể sử dụng toán tử 36 với bất kỳ toán hạng nào là một chuỗiCác kiểu nguyên thủy chuyển đổi thành chuỗi như mong đợi
Chúng ta nên cẩn thận khi sử dụng ép buộc kiểu khi chúng ta muốn tạo một phép toán và một trong các kiểu toán hạng của chúng ta là một chuỗi JavaScript trả về hoạt động của chúng tôi dưới dạng một chuỗi khi cách xử lý hoạt động chính xác sẽ gây ra lỗi vì không có cách nào để thực hiện một phép toán bằng cách sử dụng một số và một chuỗi, đây không phải là một số hợp lệ 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121" BooleanĐể ép buộc một giá trị thành Boolean một cách rõ ràng trong JavaScript, chúng ta có thể sử dụng hàm 10 + "10" // "1010" 20 + "200" // "20200" 0.212 + "1" // "0.2121"0. Để hoàn toàn ép buộc một giá trị cho Boolean, chúng ta có thể sử dụng các toán tử logic, chẳng hạn như 38, 39 và 70 trong ngữ cảnh logicThông số kỹ thuật của 71 rất rõ ràng và hữu ích. Chúng tôi có thể thấy rõ ràng những kết quả mà chúng tôi nhận được tùy thuộc vào loại giá trị mà chúng tôi vượt quaDanh sách các giá trị giả rất dễ nhớ. Mọi thứ không có trong danh sách đều là giá trị trung thực 1Như đã nêu trước đây, các toán tử logic cũng ép buộc một loại giá trị thành Boolean 3Phần kết luậnÉp buộc loại là một khái niệm JavaScript cốt lõi được sử dụng trên mọi ứng dụng, API và dịch vụ sử dụng JavaScript Nói chung, trừ khi bạn theo đuổi sự ép buộc rõ ràng, JavaScript hoàn toàn ép buộc tùy thuộc vào loại giá trị và thao tác được sử dụng. Nhưng bất kể sử dụng ép buộc kiểu ngầm định hay rõ ràng, nó cung cấp cho nhà phát triển sự linh hoạt và giúp mã dễ đọc hơn Tổng quan ngắn này cung cấp kiến thức cơ bản để hiểu về ép kiểu, tuy nhiên, việc đọc các thông số kỹ thuật ECMAScript có thể cung cấp đánh giá sâu hơn về khái niệm này để hiểu tại sao lại xảy ra kết quả ép kiểu không mong muốn Đăng NhậpTên Lửa. Gỡ lỗi JavaScript dễ dàng hơn bằng cách hiểu ngữ cảnhGỡ lỗi mã luôn là một công việc tẻ nhạt. Nhưng bạn càng hiểu lỗi của mình thì càng dễ sửa chúng LogRocket cho phép bạn hiểu những lỗi này theo những cách mới và độc đáo. Giải pháp giám sát giao diện người dùng của chúng tôi theo dõi mức độ tương tác của người dùng với giao diện người dùng JavaScript của bạn để cung cấp cho bạn khả năng tìm ra chính xác những gì người dùng đã làm dẫn đến lỗi LogRocket ghi nhật ký bảng điều khiển, thời gian tải trang, dấu vết ngăn xếp, yêu cầu/phản hồi mạng chậm với tiêu đề + nội dung, siêu dữ liệu trình duyệt và nhật ký tùy chỉnh. Hiểu tác động của mã JavaScript của bạn sẽ không bao giờ dễ dàng hơn thế Sự khác biệt giữa kiểu đúc và kiểu ép buộc là gì?Sự khác nhau cơ bản giữa chuyển kiểu và ép kiểu, i. e. chuyển đổi kiểu được thực hiện "tự động" bởi trình biên dịch trong khi đó, chuyển kiểu phải được lập trình viên "thực hiện rõ ràng". Hai thuật ngữ “ép kiểu” và “chuyển kiểu” xuất hiện khi có nhu cầu chuyển kiểu dữ liệu này sang kiểu dữ liệu khác
Chuyển đổi kiểu trong JavaScript là gì?Chuyển đổi loại (hoặc ép kiểu) có nghĩa là chuyển dữ liệu từ loại dữ liệu này sang loại dữ liệu khác . Chuyển đổi ngầm định xảy ra khi trình biên dịch (đối với ngôn ngữ được biên dịch) hoặc thời gian chạy (đối với ngôn ngữ tập lệnh như JavaScript) tự động chuyển đổi kiểu dữ liệu. Mã nguồn cũng có thể yêu cầu chuyển đổi diễn ra một cách rõ ràng.
Sự khác biệt giữa == và cái nào cho phép ép buộc kiểu?!! operator converts both 'true' and 'false' strings to boolean true , since they are non-empty strings. Then, == chỉ cần kiểm tra sự bằng nhau của hai giá trị boolean true mà không có bất kỳ sự ép buộc nào . Toán tử == kích hoạt chuyển đổi số cho một mảng.
Làm cách nào để sử dụng kiểu ép buộc trong JavaScript?Để ép buộc một giá trị thành chuỗi một cách rõ ràng trong JavaScript, chúng ta có thể sử dụng hàm String() . Để cưỡng chế ngầm một giá trị cho một chuỗi, chúng ta có thể sử dụng toán tử + với bất kỳ toán hạng nào là một chuỗi. Chúng ta nên cẩn thận khi sử dụng ép buộc kiểu khi chúng ta muốn tạo một phép toán và một trong các kiểu toán hạng của chúng ta là một chuỗi. |