Tôi nhận ra đó là một câu hỏi cũ, nhưng tôi chỉ muốn thêm một chút vào câu trả lời, vì ai đó có thể rời khỏi trang này nhầm lẫn nghĩ rằng sử dụng JSON.stringify
để so sánh/nhân bản sẽ hoạt động mà không có vấn đề miễn là nó không không được sử dụng để so sánh/sao chép các đối tượng có các thành viên không có thứ tự. (Để công bằng với câu trả lời được chấp nhận, họ không nên bỏ đi nghĩ rằng, "Nếu [các thành viên] được nhập theo cùng một thứ tự, phương pháp này sẽ hoạt động hầu hết thời gian.")
Mã lẽ minh họa trục trặc tiềm năng tốt nhất:
JSON.stringify(NaN) === JSON.stringify(null)
// => true
JSON.stringify(Infinity) === JSON.stringify(null)
// => true
// or, to put it all together:
JSON.stringify({ val1: (1/0), val2: parseInt("hi there"), val3: NaN }) === JSON.stringify({ val1: NaN, val2: null, val3: null })
// => true
// and here's the same example with "cloning" rather than comparison:
JSON.parse(JSON.stringify({ val1: (1/0), val2: parseInt("hi there"), val3: NaN }))
// => Object {val1: null, val2: null, val3: null}
Đây là những đôi mà có thể gây ra rắc rối ngay cả khi đặt hàng không phải là một vấn đề (trong đó, như những người khác đã nói, nó có thể được). Nó có thể không có khả năng trong hầu hết các trường hợp những quirks sẽ phía sau đầu xấu xí của họ, nhưng nó là tốt để được nhận thức của họ, vì họ có thể dẫn đến một số thực sự khó khăn để tìm lỗi.
Nguồn
2016-03-15 13:03:35
Tôi chỉ sử dụng các đối tượng có thể tuần tự hóa JSON. – MaiaVictor
Bài viết FWIW nghiêm ngặt về việc nói 'đối tượng JSON' và nói rằng không có thứ như 'đối tượng JSON' http://benalman.com/news/2010/03/theres-no-such-thing-as-a- json/ – DanC
@BenjaminGruenbaum không hoàn toàn trùng lặp, nhưng những kẻ đó đang sử dụng thư viện JSON cũ. – MaiaVictor