2016-03-28 15 views
5

Vì vậy, tôi đã đọc về các tính năng JavaScript được đề xuất và tôi lo ngại về việc hỗ trợ dấu phẩy ở các mảng và mảng đối tượng.Dấu phẩy theo sau có phá vỡ JSON không?

Đối với thông số, dấu phẩy ở cuối không liên quan ở đây, vì vậy, hãy bỏ qua điều đó. Tôi hiểu các lợi ích của Kiểm soát phiên bản, nhưng tôi lo lắng nó sẽ phản ứng như thế nào với JSON.

const arr = [ 
    'red', 
    'green', 
    'blue', 
]; 

Điều này sẽ trở nên hợp lệ.

Nhưng điều gì sẽ xảy ra khi bạn trả về cú pháp JSON? JSON được hỗ trợ bởi RFC, vì vậy tôi nghi ngờ JSON sẽ hỗ trợ dấu phẩy theo sau. Có lẽ một ngày nào đó ..

Nhưng làm thế nào sẽ xử lý JavaScript trở về một cái gì đó như:

const jsonReturn = [{ 
    "derp":1 
}, { 
    "foo":"bar" 
}, { 
    "slide":true, 
},]; 

Liệu Dấu phẩy sau cùng được gỡ bỏ trong nội bộ nếu kiểu nội dung tiêu đề là JSON hoặc sẽ trailing dấu phẩy phá vỡ tất cả mọi thứ?

+0

Câu trả lời ngắn: Trailing dấu phẩy là JSON không hợp lệ, nhưng hầu hết các trình phân tích cú pháp JS nhảy qua chúng (khi được hiểu là JavaScript _not_ JSON). –

+0

Phải, vì vậy "về mặt kỹ thuật" (tôi sử dụng thuật ngữ đó càng lỏng lẻo càng tốt ở đây) bạn đang nói rằng nếu dấu phẩy được trả về dưới dạng JSON, trình phân tích cú pháp sẽ bỏ qua nó và vẫn trả lại JSON hợp lệ cho người yêu cầu? –

+2

Bạn không thực sự sử dụng JSON ở đây, bạn đang tham chiếu đến các JSO. Nếu những gì bạn có ở đây đã từng đánh một trình phân tích cú pháp JSON, nó sẽ nôn ra. Tuy nhiên, loại bỏ nó ra như thể nó là một JSO nó sẽ được sử dụng tốt (bởi hầu hết các trình phân tích cú pháp JS). –

Trả lời

7

Bạn sẽ không gặp phải bất kỳ sự cố nào vì nguồn JSON và JS không liên quan gì đến nhau.

JSON không (và vì lợi ích của ví dụ, sẽ không) hỗ trợ dấu phẩy theo sau. The current JSON spec cho thấy rõ ràng rằng dấu phẩy chỉ có thể xảy ra giữa các giá trị trong một đối tượng hoặc mảng.

Nếu JS giới thiệu hỗ trợ cho dấu phẩy, thì biểu tượng nguồn của đối tượng và phiên bản được tuần tự hóa phần lớn không liên quan. Hầu hết các trình duyệt hiện nay sẽ chấp nhận một dấu phẩy đuôi, nhưng tất cả dấu phẩy sẽ bị loại bỏ trong đối tượng thực tế (dict/băm hoặc struct) đại diện:

> var foo = {bar: 1, baz: 2,}; 
< undefined 
> foo 
< Object {bar: 1, baz: 2} 

Thậm chí ngày nay, serializing một đối tượng với một dấu phẩy làm việc tốt:

> JSON.stringify({bar: 1, baz: 2,}) 
< "{"bar":1,"baz":2}" 

Dấu phẩy chỉ để phân tích cú pháp nguồn và không tồn tại trong biểu diễn đối tượng của thời gian chạy.

+0

Điều đó có áp dụng giống với dấu phẩy sau trong một mảng đối tượng không? –

+1

@SterlingArcher hoàn toàn. Cả các đối tượng và mảng đều không sử dụng dấu phẩy khi chúng đã được khởi tạo. Nó hoàn toàn dành cho trình phân tích cú pháp và trình phân tích cú pháp có thể chọn có nhận ra dấu phẩy hay không. IE không, hầu hết các trình duyệt khác đều làm. – ssube

Các vấn đề liên quan