Làm thế nào để bạn tham chiếu một đối tượng trong javascript?
Đối tượng JavaScript là loại dữ liệu quan trọng nhất và tạo thành các khối xây dựng cho JavaScript hiện đại. Lớp “Đối tượng” đại diện cho các kiểu dữ liệu JavaScript. Các đối tượng khá khác với các kiểu dữ liệu nguyên thủy của JavaScript (Số, Chuỗi, Boolean, null, không xác định và ký hiệu). Nó được sử dụng để lưu trữ các loại bộ sưu tập khóa và các thực thể phức tạp khác nhau. Nó có thể được tạo bằng cách sử dụng phương thức Object() hoặc bằng cách sử dụng bộ khởi tạo đối tượng/cú pháp bằng chữ Show Psssst. BOOTCAMP PHÁT TRIỂN WEB 2023 sẽ bắt đầu vào ngày 01 THÁNG 2 NĂM 2023. Tham gia danh sách chờ, giữ chỗ trong khóa học thuần tập kéo dài 10 tuần của tôi và tìm hiểu các nguyên tắc cơ bản, HTML, CSS, JS, Tailwind, React, Next. jsvà hơn thế nữa. ✨ Bài đăng này ghi lại tất cả các phương thức và thuộc tính đối tượng tích hợp sẵn của 37Bất kỳ giá trị nào không thuộc kiểu nguyên thủy (chuỗi, số, boolean, ký hiệu, null hoặc không xác định) đều là một đối tượng. Ngay cả các mảng hoặc các chức năng, dưới vỏ bọc, các đối tượng Giá trị 0 có thể được tạo bằng cú pháp đối tượng bằng chữ
sử dụng hàm toàn cầu 37
hoặc sử dụng hàm tạo đối tượng
Một cú pháp khác là sử dụng 2
Bạn có thể khởi tạo đối tượng với các thuộc tính bằng cú pháp này
Tất cả những cách đó về cơ bản là tương đương nhau vì tất cả chúng đều cho phép bạn truy cập vào các phương pháp mà tôi sẽ liệt kê bên dưới Bạn cũng có thể khởi tạo một đối tượng bằng cách sử dụng từ khóa 3 trước một hàm có chữ in hoa. Hàm này đóng vai trò là hàm tạo cho đối tượng đó. Trong đó, chúng ta có thể khởi tạo các đối số mà chúng ta nhận được dưới dạng tham số, để thiết lập trạng thái ban đầu của đối tượng________số 8Chúng tôi khởi tạo một đối tượng mới bằng cách sử dụng
Đối tượng có thuộc tính. Mỗi tài sản có một tên và một giá trị Bạn có thể nghĩ rằng một đối tượng về cơ bản là một bản đồ, hoặc từ điển, cấu trúc dữ liệu, và bạn đã đúng Giá trị của một thuộc tính có thể thuộc bất kỳ loại nào, có nghĩa là nó thậm chí có thể là một đối tượng, vì các đối tượng có thể lồng các đối tượng khác Khi một giá trị thuộc tính là một hàm, chúng ta gọi nó là phương thức Các đối tượng có thể kế thừa các thuộc tính của chúng từ các đối tượng khác và chúng ta sẽ thấy chi tiết điều này khi chúng ta nói về tính kế thừa Các đối tượng luôn được truyền theo tham chiếu Nếu bạn gán một biến có cùng giá trị với biến khác, nếu đó là kiểu nguyên thủy như số hoặc chuỗi, thì chúng sẽ được truyền theo giá trị 0 1Thuộc tính đối tượng tích hợpĐối tượng Object có 2 thuộc tính
phương pháp tĩnhChúng tôi chia các phương thức thành các phương thức tĩnh và các phương thức thể hiện. Các phương thức tĩnh được gọi trực tiếp trên 37. Các phương thức sơ thẩm được gọi trên một thể hiện đối tượng (đối tượng ______08)Các phương thức tĩnh là một cách tuyệt vời để cung cấp một không gian tên cho các hàm hoạt động trong cùng một không gian. Bằng cách này, chúng ta không có các chức năng toàn cầu xung quanh, nhưng tất cả đều được đặt tên theo đối tượng toàn cầu 37 Đây là những ghi chú dựa trên Khóa học video JavaScript dành cho người mới bắt đầu của tôi. Đó là một cách tiếp cận thú vị, nặng nhọc để học JavaScript hiện đại từ đầu Sử dụng mã BEGINNERJS để được giảm thêm $10 JavaScript mới bắt đầu. com JavaScript, Loại dữ liệu Chỉnh sửa bài đăng Một điều quan trọng cần hiểu trong JavaScript là sự khác biệt giữa tham chiếu và giá trị Chúng tôi sẽ sử dụng một ví dụ để làm nổi bật sự khác biệt Giả sử bạn có 2 biến sau, cả hai đều được gán giá trị là 'wes' 👇 6Bạn có thể kiểm tra xem các biến đó có bằng nhau hay không bằng cách thêm dòng mã này 73, dòng này sẽ trả về giá trị true vì cả hai giá trị đều giống nhau về cả giá trị và loạiTuy nhiên, điều gì sẽ xảy ra nếu bạn gán giá trị của "scott" cho 74 và sau đó kiểm tra xem chúng có bằng nhau không? 9Điều đó sẽ trả về sai, điều này không có gì ngạc nhiên 7Bây giờ, câu hỏi là, điều gì sẽ xảy ra nếu bạn đặt 74 bằng 76 như hình trên 👆?Nếu bạn đăng nhập lại để kiểm tra so sánh, nó sẽ trả về true Nếu bạn kiểm tra giá trị của từng biến, thì cả 74 và 76 đều sẽ trả về "wes"Nếu bạn lấy 76 và đặt nó thành 74, thì đó là điều tương tự, cả hai giá trị sẽ vẫn bằng "wes", như vậy 7Bây giờ câu hỏi đặt ra là, nếu bạn thay đổi 76 thành 72 như vậy, liệu 74 và 76 có còn bằng nhau không?Bạn có thể kiểm tra giá trị của cả hai biến bằng cách nhập chúng vào bảng điều khiển Bạn sẽ nhận thấy rằng 74 vẫn là "wes" trong khi 76 là "westopher", bởi vì chúng tôi chưa cập nhật 74Vì vậy, có một vài điều cần lưu ý trong bài tập này
Bây giờ hãy chứng minh điều này với một đối tượng Tạo một biến 73 và gán cho nó một đối tượng với các thuộc tính 74 và 75 như vậy 👇 7Sao chép mã đó bằng cách sao chép và dán và đổi tên biến thành 76 5Nếu bạn làm mới trang HTML và mở bảng điều khiển, nếu bạn thử nhập vào 77, bạn sẽ thấy nó trả về falseTại sao? Bạn đang nghĩ "nó là cùng một đối tượng. Nó là một đối tượng có cùng nội dung bên trong nó, vậy tại sao chúng ta lại sai khi kiểm tra chúng?" Đó là bởi vì khi bạn so sánh các đối tượng, nó được thực hiện bằng cách tham chiếu đến chính đối tượng đó, chứ không phải các giá trị bên trong đối tượng đó Vì vậy, trong ví dụ của chúng ta, 73 và 76 đều là các đối tượng có cùng nội dung bên trong chúng, nhưng chúng không giống nhau vì chúng không phải là cùng một đối tượngĐó là sự khác biệt so với nội dung của một chuỗi bởi vì một chuỗi chỉ có thể có một giá trị trong khi một đối tượng và như chúng ta sẽ tìm hiểu, mảng có thể có nhiều thứ bên trong chúng, cho dù chúng là thuộc tính và giá trị hay chỉ đơn giản là các mục Điều tiếp theo chúng ta cần biết về các đối tượng là nếu bạn tạo một đối tượng 50 mới như vậy 👇 0Nếu làm mới trang HTML và xem 51 trong bảng điều khiển, bạn sẽ thấy như sau 👇Bây giờ nếu bạn tiếp tục và cập nhật tên của 51 như minh họa bên dưới, bạn sẽ thấy gì trong bảng điều khiển khi đăng nhập 53? 4Bạn nhận được Larry Tuy nhiên, nếu bạn đăng nhập 54 như hình bên dưới thì sao? 6Nếu bạn nhìn vào đối tượng person1, chúng ta đã đặt "wes" là đầu tiên và "bos" là cuối cùng. Vì vậy, 55 phải là Wes, phải không?SAI LẦM. Nó trả về Larry Nếu bạn thử gõ 73, 76 và 51 trong bảng điều khiển, bạn sẽ thấy kết quả trả về như sau 👇chuyện gì đang xảy ra ở đó vậy? Bạn vừa cập nhật 51, nhưng vì lý do nào đó, 73 cũng được cập nhậtTrong bảng điều khiển, hãy thử cập nhật 01 như vậy. 02. Vì vậy, bây giờ 01 sẽ trả về "Cool", nhưng còn 73 thì sao?Vậy cái quái gì vậy. ? Lý do nó xảy ra là một khái niệm cơ bản của JavaScript, nó sẽ đến và cắn vào mông bạn nếu bạn không hiểu nó Lý do xảy ra là khi các đối tượng và mảng được sao chép theo tham chiếu, (giống như bạn đã làm với 06), bạn sẽ không sao chép nóBạn chỉ đơn giản là tạo một biến tham chiếu hoặc trỏ tới biến ban đầu thay vì tạo một bản sao của nó Điều đó có thể dẫn đến các lỗi không mong muốn trong quá trình thực hiện vì bạn có thể nghĩ rằng mình chỉ đang tạo một bản sao của nó rồi sửa đổi nó, nhưng thực tế không phải vậy. 51 chưa bao giờ là đối tượng của chính nó, nó chỉ trỏ vào đối tượng ban đầuĐiều tương tự cũng xảy ra với Mảng và Bản đồ và Tập hợp mà chúng ta sẽ học trong tương lai Vì vậy, các tùy chọn của bạn với tư cách là nhà phát triển là gì khi bạn muốn lấy một bản sao thay vì tham khảo? Có một số cách khác nhau để bạn có thể sao chép một đối tượng Toán tử lây lanCách dễ nhất để sao chép một cái gì đó là thông qua một thứ gọi là sự lây lan Một trải rộng là một toán tử ba dấu chấm và nó được sử dụng để lấy mọi mục đơn lẻ trong một đối tượng và trải rộng nó vào một đối tượng mới Vì vậy, thay vì làm 06, bạn sẽ làm điều gì đó như thế này 👇 1Những gì bạn đang làm ở đó là bạn đang gán biến 51 cho một đối tượng mới bằng cách sử dụng cú pháp ký tự đối tượng, sau đó sử dụng toán tử trải rộng trong đối tượng ký tự để sao chép 73Nếu bạn đăng nhập 51, bạn sẽ thấy rằng nó có các thuộc tính giống như 73Đó là bởi vì toán tử trải rộng sẽ lấy mọi mục trong một đối tượng và trải nó vào đối tượng tiếp theo Có một cách khác để làm điều này, cách này không phổ biến kể từ khi lan truyền được giới thiệu, nhưng trước đây rất nhiều người đã sử dụng phương pháp này Bạn gọi 43 và bắt đầu với một đối tượng trống, sau đó gấp đối tượng khác vào đó 90Có thể bạn sẽ không thấy nhiều như vậy nhưng nếu bạn thấy, hãy biết rằng đó là một cách để lấy một bản sao của một đối tượng giống như sự lây lan Vì vậy, nếu bạn sử dụng toán tử trải rộng và sau đó cố gắng thay đổi giá trị của 53 thành Larry, như vậy, bạn sẽ nhận được gì? 91Nếu bạn làm mới trang HTMl và sau đó đăng nhập 53 và 55, bạn sẽ thấy rằng chỉ có giá trị của 53 được cập nhậtĐó là bởi vì lần này bạn đã sử dụng toán tử chênh lệch cung cấp cho bạn một bản sao của person1 48 chứ không phải một tài liệu tham khảoMột điều cần lưu ý là toán tử trải rộng chỉ đi sâu một cấp Điều đó có nghĩa là nếu bạn đi tới 73 và thêm một đối tượng 60, thì hãy sao chép đối tượng đó vào 51 như vậy 👇 92Nếu bạn cố cập nhật 62 và sau đó xem đối tượng trong bảng điều khiển, bạn sẽ nhận thấy rằng 63 bằng 100Tuy nhiên, nếu bạn nhìn vào 73, bạn sẽ nhận thấy rằng 65 cũng được cập nhật thành 100Đây là cùng một vấn đề. 65 cũng được cập nhật mặc dù Wes vừa nói với chúng tôi rằng chúng tôi có thể sao chép một đối tượng bằng toán tử trải rộngVì vậy, những gì chúng ta cần rút ra từ đó là toán tử trải rộng và toán tử 43, chúng thực hiện cái được gọi là sao chép nông, nghĩa là chúng sẽ chỉ đi sâu một cấp khi sao chépNếu bạn muốn thực hiện một bản sao sâu hoặc một bản sao sâu của một đối tượng, của tất cả các thuộc tính, có một số cách khác nhau để thực hiện Cách phổ biến nhất rất có thể là sử dụng thứ gọi là thư viện tiện ích LodashWes thường sử dụng https nhất. //lodash. com Lodash là một thư viện mà bạn có thể đưa vào tập lệnh của mình Nó có rất nhiều phương thức được sử dụng khi làm việc với các đối tượng và mảng. Một trong số đó là để tạo các bản sao của các đối tượng. Hãy cùng tham khảo tài liệu bằng cách tìm kiếm từ khóa clone trên trang web Dựa trên tài liệu, bạn có thể thấy rằng 68 tạo một bản sao nông của một giá trịTài liệu cũng cung cấp một ví dụ về cách sử dụng phương pháp. Bạn sẽ sử dụng nó bằng cách gọi 69, đây là nơi chứa tất cả các phương thức lodash, sau đó gọi 10Điều đó sẽ chỉ thực hiện một bản sao cấp cao như chúng ta đã làm với toán tử trải rộng trước đó, vì vậy không có nhiều giá trị trong đó Có một phương thức khác gọi là 11Bản sao sâu cũng sẽ lấy một bản sao của bất kỳ đối tượng lồng nhau nào cho chúng tôi Làm thế nào để bạn sử dụng nó? Wes thích sử dụng thứ gọi là UNPKG (https. //giải nén. com) Nếu bạn điều hướng đến 12, nó sẽ tải lodash mới nhất, vì vậy bạn chỉ cần lấy url đó và đi lên phía trên tập lệnh mà bạn cần và thêm nóKhi bạn đang tải JavaScript mà mã khác phụ thuộc vào, bạn cần tải mã đó trước Thêm phần sau vào phần thân, sau đầu vào 👇 93Bây giờ nếu bạn nhập 69 trong bảng điều khiển của mình, bạn sẽ thấy rằng tất cả các giá trị lodash đều có sẵn cho chúng tôiSau này khi chúng tôi đề cập đến các mô-đun, Wes sẽ chỉ cho chúng tôi cách tải chỉ những cái bạn cần, vì không chắc bạn sẽ cần mọi phương thức trong thư viện nhưng để đơn giản, chúng tôi sẽ tải toàn bộ thư viện ngay bây giờ Tiếp theo trong mã của chúng tôi, hãy nhận xét mã nơi bạn đang sao chép person1 thành person3 với toán tử lây lan, 14,Bên dưới nó thêm đoạn mã sau👇 94Như bạn có thể thấy, 65 vẫn bằng 10, bởi vì bạn đã thực hiện một bản sao sâu bằng phương thức lodash và sau đó chỉ sửa đổi giá trị cho đối tượng 51 vì 51 không còn là tham chiếu đến 73Wes không thường xuyên đạt được điều này nhưng điều đó chủ yếu là do những thứ anh ấy làm chỉ có thể được thực hiện bằng JavaScript, nhưng khi bạn phải làm những việc khó hơn như bản sao sâu, bạn có thể sử dụng phương pháp lodash Lodash cũng có các phương thức để làm việc với mảng Toán tử trải rộng 19 cũng hữu ích khi làm việc với các đối tượng hợp nhấtĐể chứng minh điều đó, hãy làm một ví dụ Thêm mã sau 👇 95Như vậy ta có 2 đối tượng này là 900 và 901, cả 2 đều có 2 thuộc tínhBạn muốn hợp nhất 2 đối tượng này và cách dễ nhất để làm điều đó là chỉ cần tạo một biến mới, một đối tượng theo nghĩa đen, 19 theo sau là một trong những đối tượng bạn muốn hợp nhất, sau đó là dấu phẩy theo sau bởi một 19 của đối tượng tiếp theo 96Bạn có thể trải bao nhiêu đối tượng tùy thích Bây giờ chúng tôi có một thuộc tính khoảng không quảng cáo mới mà bạn có thể thấy nếu bạn làm mới trang, mở bảng điều khiển và nhập vào 904Bạn cũng có thể đặt một số đối tượng trên dòng riêng của chúng và thêm các giá trị của riêng bạn vào Ví dụ: bạn có thể làm như sau 👇 97Và bạn có thể thấy rằng 905 sẽ được thêm vào nóBạn có thể trộn và kết hợp sự lan rộng Điều duy nhất bạn thực sự cần biết là nếu có các bản sao (ví dụ: hàu có thể là nấm sò hoặc hàu từ biển), thì con nào sẽ thắng? Giả sử bạn đã thêm hàu vào 900 VÀ 901 như vậy 👇 98 908 chiến thắng. Tại sao?Vì 901 xuất hiện sau trong trải bài nên thứ tự của trải bài có ý nghĩa trong trường hợp nàyTương tự, nếu bạn nhập mã sau 👇 99Bacon sẽ là 10 vì nó sẽ ghi đè lên giá trị trong 900Wes thực sự thích toán tử lây lan. Nó cũng có thể được sử dụng cho mảng mà chúng ta sẽ tìm hiểu trong các bài học về mảng Điều cuối cùng chúng ta sẽ nói về nhà là khái niệm chuyển qua tham chiếu so với sao chép cũng áp dụng cho các chức năng Giả sử bạn có một hàm 911, hàm này nhận một đối số 912 và trong hàm này, bạn đã sửa đổi giá trị của dữ liệu thành một thứ khác, như vậy 👇 70Tất cả những gì chức năng này làm là lấy một đối số và thay đổi dữ liệu đó vì bất kỳ lý do gì Bây giờ, nếu bạn chạy hàm đó và chuyển cho nó biến 74 được đặt thành "wes" trong mã, nếu bạn xem qua hàm đó và ghi lại dữ liệu như vậy 👇 71Nếu bạn làm mới trang và nhập 74 vào bảng điều khiển, nó vẫn sẽ trả về "wes"Điều đó có nghĩa là khi bạn chuyển biến 74 sang 911, bạn chỉ chuyển vào giá trị của "wes", nó không thực sự tham chiếu đến biến bên ngoài (điều này tốt. )Bây giờ, hãy làm điều đó một lần nữa với một đối tượng 👇 72Nếu bạn làm mới trang và nhìn vào bảng điều khiển, bạn sẽ thấy giá trị của 912 được ghi lại như hình trênTuy nhiên, nếu bạn gõ vào 904, là đối tượng nằm ngoài hàm 919, bạn sẽ thấy rằng nó cũng chứa thuộc tính 920Điều đó có nghĩa là nếu bạn chuyển một đối tượng vào một hàm và bạn sửa đổi đối tượng đó, thì đối tượng bên ngoài cũng sẽ được cập nhật Đó không phải là trường hợp đối với booleans, số và chuỗi, nhưng đó là trường hợp đối với đối tượng và mảng Điều đó có nghĩa là nếu bạn sửa đổi một đối tượng hoặc một mảng được truyền vào một hàm bên trong hàm, hãy biết rằng bạn có thể vô tình sửa đổi dữ liệu nằm ngoài nó Đó là một nguồn lỗi lớn, bởi vì khi bạn chuyển dữ liệu dưới dạng tham chiếu, bạn có thể vô tình sửa đổi dữ liệu nằm ngoài chức năng đó Nếu đúng như vậy, bạn đảm bảo rằng bạn chuyển nó dưới dạng một bản sao Có thể trường hợp bạn muốn sửa đổi dữ liệu bên ngoài, nhưng đôi khi bạn không muốn và điều đó dẫn đến lỗi Bạn có thể tham khảo một đối tượng?Các đối tượng được gán và sao chép theo tham chiếu . Nói cách khác, một biến lưu trữ không phải “giá trị đối tượng”, mà là “tham chiếu” (địa chỉ trong bộ nhớ) cho giá trị. Vì vậy, sao chép một biến như vậy hoặc chuyển nó dưới dạng đối số hàm sao chép tham chiếu đó, chứ không phải chính đối tượng đó.
Tham chiếu đến một đối tượng là gì?Một tham chiếu bao gồm một danh sách địa chỉ được sắp xếp theo thứ tự và thông tin lớp về đối tượng được tham chiếu . Mỗi địa chỉ được đại diện bởi một lớp con của RefAddr. và chứa thông tin về cách xây dựng đối tượng.
Làm cách nào để in tham chiếu của một đối tượng trong JavaScript?Phương pháp-1. sử dụng bảng điều khiển. log để in một đối tượng trong JavaScript Phương pháp-2. Sử dụng đối tượng. ký hiệu propertyName để in các giá trị Đối tượng trong JavaScript Phương pháp-3. Sử dụng stringify() để in các đối tượng trong JavaScript Phương pháp-4. Sử dụng vòng lặp for để in các giá trị đối tượng trong JavaScript Các đối tượng có được lưu trữ theo tham chiếu trong JavaScript không?Đối tượng và Mảng
. Khi có nhiều hơn một biến được đặt để lưu trữ một đối tượng, mảng hoặc hàm, các biến đó sẽ trỏ đến cùng một không gian được phân bổ trong bộ nhớ. Thông qua tham chiếu. Objects in JavaScript are passed by reference. When more than one variable is set to store either an object , array or function , those variables will point to the same allocated space in the memory. Passed by reference. |