Hướng dẫn mutable and immutable in javascript - có thể thay đổi và bất biến trong javascript
Tổng quan / Công nghệ web Show
Tài liệu tham khảo công nghệ web cho các nhà phát triển HTML Cấu trúc nội dung trên web CSS Mã được sử dụng để mô tả kiểu tài liệu JavaScript Ngôn ngữ kịch bản đa năng HTTP Giao thức truyền tài nguyên web API web Giao diện để xây dựng các ứng dụng web Tiện ích mở rộng web Phát triển tiện ích mở rộng cho trình duyệt web Công nghệ web Tài liệu tham khảo công nghệ web cho các nhà phát triển Tôi đã viết một chút trước đây về tính bất biến và cách tạo ra các mảng và đối tượng bất biến với vani JS. Một trong những điều mà học sinh của tôi thường thấy khó hiểu về tính bất biến là những gì thực sự có nghĩa là bất biến. Hãy để khám phá điều đó một chút. Hãy nói rằng bạn có một số thứ được lưu vào các biến và bạn muốn tạo các bản sao. Với các số và chuỗi, việc gán biến ban đầu cho một biến mới tạo ra một mục mới.
Đối tượng và mảng hoạt động rất lớn. Việc gán biến ban đầu cho một biến mới tạo ra một tham chiếu đến bản gốc chứ không phải là một mục mới.
Mặc dù các bản sao là những bản được sửa đổi, các mảng và đối tượng ban đầu cũng được cập nhật. Các biến mới chỉ trở lại bản gốc. Ở đây, một bản demo với tất cả các ví dụ này. Vì vậy, có nghĩa là gì có nghĩa là bất biến?Nếu một mục có thể thay đổi, việc sửa đổi bản sao cũng sửa đổi bản gốc. Nếu nó bất biến, việc sửa đổi bản sao không ảnh hưởng đến bản gốc. Nó khó hiểu vì âm thanh bất biến như vật phẩm có thể thay đổi. Mặc dù vậy, điều thực sự có nghĩa là bản gốc không thay đổi khi bản sao. Hy vọng điều đó sẽ xóa một số điều lên! Xuất bản ngày 23 tháng 3 năm 2021last cập nhật ngày 18 tháng 9 năm 2021 Bạn thường nghe các nhà phát triển phản ứng dày dạn nhất đề nghị sử dụng toán tử lây lan để sao chép một mảng thay vì chỉ đơn giản là gán nó cho một biến mới. Điều này có liên quan đến các loại dữ liệu cụ thể là một loại tham chiếu trong JavaScript, do đó có thể thay đổi. Khái niệm về tính đột biến và tính bất biến trong JavaScript là điều cần thiết để hiểu để tránh các lỗi. Hãy cùng đi sâu hơn vào ý tưởng về tính đột biến so với tính bất biến trong JavaScript. Các loại nguyên thủy so với các loại tham chiếu trong JavaScriptDữ liệu được gán cho biến JavaScript có thể thuộc hai loại, loại nguyên thủy và loại tham chiếu. Có một sự khác biệt trong cách JavaScript đối xử với hai loại dữ liệu này. Để biết chúng được đối xử khác nhau như thế nào, trước tiên, hãy để hiểu về sự khác biệt giữa các loại nguyên thủy và tham chiếu. Các loại nguyên thủyCác loại nguyên thủy là các phần dữ liệu nguyên tử đơn giản trong JavaScript. Các loại nguyên thủy luôn được lưu và truy cập bởi giá trị của biến chứ không phải là tham chiếu đến một đối tượng khác. Có sáu loại nguyên thủy trong JavaScript:
Các loại tham chiếuCác loại tham chiếu không phải là giá trị nguyên tử đơn giản nhưng là các đối tượng được tạo thành từ nhiều thuộc tính được gán cho chúng. Chúng được lưu trữ dưới dạng tham chiếu trong bộ nhớ và không phải là giá trị độc lập được gán cho các biến. Có ba loại tham chiếu trong JavaScript:
Cách các loại nguyên thủy và loại tham chiếu được lưu trữ trong bộ nhớLàm thế nào các loại nguyên thủy và các loại tham chiếu được lưu trữ trong bộ nhớ là cơ sở của cách chúng khác nhau. Hãy cùng nhìn vào một vài ví dụ và cố gắng hiểu cách họ sử dụng bộ nhớ khác nhau. Sử dụng bộ nhớ theo các loại nguyên thủyNhư đã nhấn mạnh trước đó, các loại nguyên thủy được lưu trữ dưới dạng một giá trị nguyên tử duy nhất được gán cho một biến trong bộ nhớ. Hãy để xem ví dụ này:
Nhìn vào ví dụ trên, tôi đã tạo một tên biến và gán cho nó một giá trị 0 và gán cho nó một giá trị của tên biến JavaScript sẽ đi trước và tạo một không gian mới trong bộ nhớ và phân bổ cùng một giá trị của tên biến và gán nó cho biến 0. Giá trị mới được gán cho biến 0, hoàn toàn tách biệt với biến 3 và không có bất kỳ tham chiếu nào đến nó.Sử dụng bộ nhớ bởi các loại tham chiếuCác giá trị tham chiếu là các đối tượng được lưu trữ trong bộ nhớ và tham chiếu đến các đối tượng thay vì các vị trí chuyên dụng trong bộ nhớ, không giống như các loại nguyên thủy. Hãy cùng xem xét ví dụ sau để hiểu rõ hơn cách các loại tham chiếu được lưu trong bộ nhớ bởi JavaScript.
Hãy để Lừa chỉ tuyên bố một biến được gọi là người sẽ chứa một đối tượng chứa 3 và tuổi của đối tượng người. Bây giờ tôi sẽ tiếp tục và tạo một biến khác có tên 5 và gán nó cùng một đối tượng 6. Đây là nơi mọi thứ bắt đầu trở nên khác biệt so với các loại nguyên thủy. Trong trường hợp này, JavaScript sẽ lưu đối tượng 5 chỉ đơn giản là tham chiếu đến đối tượng 6.Nếu bạn nhìn vào hình ảnh này, bạn sẽ nhận ra rằng JavaScript ở đây thực sự chỉ vào cùng một đối tượng trong bộ nhớ. Mặc dù nó đã tạo ra một biến mới, như một giá trị, biến đó chỉ đề cập đến cùng một đối tượng 6 mà chúng ta đã tạo trước đây.Hiểu về tính bất biến và tính đột biến của các loại nguyên thủy và tham chiếu trong JavaScriptVì chúng ta hiện đang rõ ràng với các loại nguyên thủy và tham chiếu trong JavaScript, chúng ta có thể dễ dàng hiểu được khái niệm về tính đột biến và tính bất biến trong JavaScript. Có thể thay đổi hoặc thay đổi vào nơi bất biến có nghĩa là một cái gì đó không thể thay đổi hoặc thêm vào. Các giá trị nguyên thủy trong JavaScript không thể có bất cứ điều gì được thêm vào chúng, chúng chỉ có thể được gán lại và do đó tất cả các giá trị nguyên thủy trong JavaScript là bất biến. Hãy xem điều này với một ví dụ.
Mở rộng ví dụ trước đây của chúng tôi về các loại nguyên thủy, hãy để in các giá trị của cả hai biến của chúng tôi, tức là 3 và 0 vào bảng điều khiển và xem những gì chúng tôi nhận được. Như mong đợi, cả biến trả lại giá trị john . Bây giờ, hãy để chỉ định lại ____10 thành 4 và sau đó một lần nữa in các giá trị của cả hai biến vào bảng điều khiển. Bây giờ bạn thấy rằng giá trị của chỉ 0 được JavaScript gán lại thành 4, nhưng biến 3 không thay đổi. Chương trình này cho thấy JavaScript xử lý riêng 2 biến này, mặc dù 0 ban đầu được sao chép từ biến 3. Điều này chứng minh rằng các giá trị nguyên thủy trong JavaScript, trong trường hợp này, chuỗi, là bất biến.Hãy cùng cố gắng sao chép cùng một ví dụ cho các loại tham chiếu. Chọn từ ví dụ trước của chúng tôi, hãy để in các giá trị của cả hai đối tượng 6 và 5 vào bảng điều khiển và xem những gì chúng tôi nhận được.
Chúng tôi thấy hai đối tượng được in trên bảng điều khiển có cùng thuộc tính. Bây giờ tôi sẽ thay đổi một trong các thuộc tính của đối tượng 5 và in lại vào bảng điều khiển.
Bạn thấy rằng JavaScript đã thay đổi người cũng như 5. Điều này là do đối tượng 5 được tạo bằng cách tham chiếu đối tượng 6. Với các loại tham chiếu, JavaScript tạo một tham chiếu đến cùng một đối tượng và đối tượng vẫn có thể thay đổi. Vì đối tượng có thể thay đổi, nó có thể được thay đổi hoặc một thuộc tính mới có thể được thêm vào.Toán tử lây lan, toán tử lây lan được giới thiệu trong ES6 (thêm thông tin về ES6 và cho phép bạn sao chép các đối tượng của mình một cách an toàn và tạo một thể hiện mới của đối tượng thay vì chỉ tham chiếu đối tượng trước đó. Chúng ta hãy xem ví dụ tương tự và xem cách chúng ta có thể sao chép một đối tượng và lưu một thể hiện mới của đối tượng của biến.
Hãy để Lừa lấy cùng một đối tượng 6 và thay vì gán trực tiếp cho một biến lần này, hãy để sử dụng toán tử lây lan để sao chép nó. Toán tử lây lan có thể được sử dụng bằng tiền tố ba chấm 7 trước đối tượng mà bạn muốn sao chép và gói gọn nó bằng cú pháp đối tượng theo nghĩa đen. Bằng cách này, JavaScript tạo ra một đối tượng mới và lưu trữ nó trong biến 5. Hãy để cố gắng thay đổi một trong các thuộc tính của 5. Tôi sẽ thay đổi tên thành 4. Bây giờ, hãy để Lôi in cả đối tượng vào bảng điều khiển và xem những gì chúng ta nhận được. Bạn thấy, lần này, chúng tôi chỉ thay đổi thuộc tính tên của đối tượng 5 chứ không phải đối tượng 6. Điều này là do 5 đã được tạo và lưu dưới dạng đối tượng mới bằng cách sử dụng toán tử lây lan chứ không phải là tham chiếu đến đối tượng 6.Nhận quyền truy cập vào nhiều câu chuyện như vậy trên Cloudaff, cảm ơn vì đã đọc, và hy vọng, điều này là hữu ích! Tôi đã tạo ra một trò lừa đảo JavaScript rộng rãi. Nó đã được thiết kế theo cách mà bạn dễ dàng tham khảo từng thuộc tính và phương thức cho các đối tượng JavaScript khác nhau. Nó hoàn toàn miễn phí để tải xuống từ liên kết trên. Ví dụ với JavaScript với ví dụ là gì?Dữ liệu bất biến không thể thay đổi cấu trúc của nó hoặc dữ liệu trong đó. Nó đặt một giá trị trên một biến không thể thay đổi, làm cho giá trị đó trở thành một sự thật, hoặc giống như một nguồn sự thật - giống như cách một công chúa hôn một con ếch với hy vọng nó sẽ biến thành một hoàng tử đẹp trai. Bất biến nói rằng ếch sẽ luôn là một con ếch.cannot change its structure or the data in it. It's setting a value on a variable that cannot change, making that value a fact, or sort of like a source of truth — the same way a princess kisses a frog hoping it will turn into a handsome prince. Immutability says that frog will always be a frog.
Định nghĩa là gì so với bất biến là gì?Một đối tượng có thể thay đổi có thể được thay đổi sau khi nó được tạo và một đối tượng bất biến không thể.Điều đó nói rằng, nếu bạn xác định lớp của riêng mình, bạn có thể làm cho các đối tượng của nó trở nên bất biến bằng cách làm cho tất cả các trường cuối cùng và riêng tư.. That said, if you're defining your own class, you can make its objects immutable by making all fields final and private.
Điều gì là thay đổi và không thể thay đổi trong JavaScript?Một giá trị có thể thay đổi là một giá trị có thể được thay đổi mà không tạo ra một giá trị hoàn toàn mới.Trong JavaScript, các đối tượng và mảng có thể thay đổi theo mặc định, nhưng các giá trị nguyên thủy thì không - một khi giá trị nguyên thủy được tạo ra, nó không thể thay đổi, mặc dù biến giữ nó có thể được chỉ định lại.. In JavaScript, objects and arrays are mutable by default, but primitive values are not — once a primitive value is created, it cannot be changed, although the variable that holds it may be reassigned.
Điều gì có thể thay đổi và bất biến với một ví dụ?Các đối tượng trong đó bạn có thể thay đổi các trường và trạng thái sau khi đối tượng được tạo được gọi là các đối tượng có thể thay đổi.Ví dụ: Java.... Sự khác biệt giữa có thể thay đổi và bất biến trong Java là gì ?. |