2014-09-25 15 views
6

Nếu trong Chrome console tôi chạy JSON thích hợp:Ký hiệu đối tượng JavaScript có đúng JSON không?

{"aaa":"bbb"} 

tôi nhận được:

SyntaxError: Unexpected token : 

Tuy nhiên, nếu tôi chạy ví dụ .:

{aaa:"bbb"} 

Nó doesnt phàn nàn. Cũng chạy dưới đây là tốt:

aaa={"aaa":"bbb"} 

Tôi nghĩ rằng JSON đúng phải có tên thuộc tính được bọc trong dấu ngoặc kép vậy tại sao điều này lại xảy ra? JS là ký hiệu đối tượng không đúng JSON?

+0

Giải thích "chạy đúng JSON". Bạn đang sử dụng 'console.log ({" aaa ":" bbb "})'? – PHPglue

+0

JSON chỉ là viết tắt của Ký hiệu đối tượng JavaScript. Một đối tượng theo nghĩa đen là JSON. – PHPglue

+0

Bạn không cần phải bọc tên thuộc tính trong dấu ngoặc kép trừ khi chúng chứa dấu cách, toán tử toán học (ví dụ: '+', '-'), v.v. –

Trả lời

13

Vấn đề là do bối cảnh ngữ pháp/phân tích cú pháp.

Cho {"aaa":"bbb"} làm chương trình, đây là Block [statement] trong đó "aaa" là một chuỗi theo sau là dấu hai chấm và do đó là Cú pháp không hợp lệ. Nó có thể được sao chép tối thiểu là: "aaa":"bbb", khi niềng răng không làm gì ngoài việc thêm nhầm lẫn.

Với {aaa:"bbb"} như một chương trình, đây là một tuyên bố nơi aaa (một Định danh) là một Label tiếp theo là chuỗi "bbb" (cũng trong bối cảnh tuyên bố). Nó là tốt, nhưng nó không không trả về một đối tượng. Tương tự, nó tương đương với aaa:"bbb" trong ngữ cảnh câu lệnh.

Với aaa={"aaa":"bbb"} như một chương trình, bây giờ {..} được phân tách trong một bối cảnh biểu và hạch toán như Object Literal; đối tượng kết quả được gán cho biến. Ngữ cảnh biểu thức có thể bị buộc với các cấu trúc ngữ pháp khác, chẳng hạn như +{"aaa":"bbb"}, ({"aaa":"bbb"}) hoặc, hữu ích hơn, console.log({"aaa":"bbb"}).

Với tất cả những gì trên đường đi, bởi vì JavaScript Object cú pháp Literal chỉ đơn giản là không áp dụng trong hai trong ba trường hợp:

JSON là almost-but-not-quite một hợp-tập hợp con của JavaScript Object Literals; sử dụng công cụ và xác thực hợp lệ JSON.

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