Câu hỏi khá rõ ràng ... Khi sử dụng .push() trên một mảng trong javascript, là đối tượng được đẩy vào mảng con trỏ (nông) hoặc đối tượng thực (sâu) bất kể loại nào.Các đối tượng có được đẩy vào một mảng trong bản javascript sâu hoặc nông không?
Trả lời
Tùy thuộc vào những gì bạn đang đẩy. Các đối tượng và mảng được đẩy như một con trỏ đến đối tượng gốc. Các kiểu nguyên thủy được tích hợp sẵn như số hoặc boolean được đẩy dưới dạng bản sao. Vì vậy, vì các đối tượng không được sao chép theo bất kỳ cách nào, không có bản sao sâu hoặc nông cho chúng.
Dưới đây là một đoạn làm việc cho thấy nó:
var array = [];
var x = 4;
var y = {name: "test", type: "data", data: "2-27-2009"};
// primitive value pushes a copy of the value 4
array.push(x); // push value of 4
x = 5; // change x to 5
console.log(array[0]); // array still contains 4 because it's a copy
// object reference pushes a reference
array.push(y); // put object y reference into the array
y.name = "foo"; // change y.name property
console.log(array[1].name); // logs changed value "foo" because it's a reference
jfriend00 là đúng vào dấu ở đây, nhưng một rõ nhỏ: Điều đó không có nghĩa là bạn không thể thay đổi những gì bạn biến được trỏ đến. Đó là, y
ban đầu tài liệu tham khảo một số biến mà bạn đưa vào mảng, nhưng sau đó bạn có thể lấy biến có tên y
, ngắt kết nối nó từ đối tượng đó là trong mảng bây giờ, và kết nối y
(ví dụ, làm cho nó tham khảo) một cái gì đó khác hoàn toàn mà không thay đổi đối tượng mà bây giờ chỉ được tham chiếu bởi mảng.
http://jsfiddle.net/rufwork/5cNQr/6/
var array = [];
var x = 4;
var y = {name: "test", type: "data", data: "2-27-2009"};
// 1.) pushes a copy
array.push(x);
x = 5;
document.write(array[0] + "<br>"); // alerts 4 because it's a copy
// 2.) pushes a reference
array.push(y);
y.name = "foo";
// 3.) Disconnects y and points it at a new object
y = {};
y.name = 'bar';
document.write(array[1].name + ' :: ' + y.name + "<br>");
// alerts "foo :: bar" because y was a reference, but then
// the reference was moved to a new object while the
// reference in the array stayed the same (referencing the
// original object)
// 4.) Uses y's original reference, stored in the array,
// to access the old object.
array[1].name = 'foobar';
document.write(array[1].name + "<br>");
// alerts "foobar" because you used the array to point to
// the object that was initially in y.
- 1. đối tượng JavaScript đẩy vào một mảng
- 2. Đối tượng đẩy Javascript vào mảng
- 3. Arrays.copyOf có tạo bản sao nông hoặc sâu không?
- 4. Hiểu dict.copy() - nông hoặc sâu?
- 5. std vector C++ - bản sao sâu hoặc nông
- 6. JavaScript - Đếm bản sao trong một mảng các đối tượng
- 7. SqlCommand.Clone() có tạo bản sao sâu hoặc bản sao nông không?
- 8. Đẩy mảng vào mảng trong Javascript (jQuery)
- 9. Hoạt động cắt có cho tôi bản sao sâu hoặc nông không?
- 10. Đẩy Javascript Đối tượng vào mảng toàn cục sẽ ghi đè các giá trị trước đó?
- 11. JavaScript, chuyển đối tượng vào mảng
- 12. Làm thế nào để đẩy một mảng các đối tượng vào một mảng trong mongoose với một cuộc gọi?
- 13. Đường ray đẩy vào mảng lưu đối tượng
- 14. Làm phẳng mảng đối tượng vào một mảng đối tượng khác bằng cách sử dụng javascript
- 15. tạo mảng đối tượng trong javascript
- 16. Javascript đối tượng sao chép sâu
- 17. Văn bản đối tượng JavaScript và các ký tự mảng
- 18. javascript: Kiểm tra nếu một đối tượng không có tài sản hoặc nếu một bản đồ/kết hợp mảng trống
- 19. Bản sao sâu của mảng trong Ruby
- 20. Thêm đối tượng vào một mảng đối tượng trong Powershell
- 21. Bản sao sâu của đối tượng C#
- 22. Có thể định nghĩa một mảng các cấu trúc hoặc các đối tượng trong VBA không?
- 23. Phương pháp sao chép trên mảng bản sao sâu hay nông?
- 24. mảng lọc javascript của các đối tượng
- 25. Merge phím mảng và mảng giá trị vào một đối tượng trong Javascript
- 26. thêm JavaScript Object vào một đối tượng Javascript
- 27. mảng javascript đối tượng
- 28. Mảng bên trong đối tượng Javascript?
- 29. Javascript indexOf trên một mảng của các đối tượng
- 30. Liên minh mảng đối tượng trong JavaScript?
điểm thú vị về sử dụng 'new' để "ngắt kết nối" các tham chiếu đối tượng. –
Giải thích downvote? Khó khắc phục sự cố nếu bạn không cho tôi biết đó là gì. – ruffin
Tại sao lại ping tôi? Tôi upvoted này một thời gian dài trước đây và đã làm như câu trả lời của bạn. Dưới đây là một màn hình bỏ phiếu: http://i.imgur.com/AnDt98c.png –