2009-04-07 22 views
6

Trong hầu hết các trình tuần tự hóa/trình giải mã JSON, phần "khóa" trong từ điển javascript/mảng băm được viết dưới dạng một chuỗi.Tại sao phần "khóa" trong mã băm JS/dict là một chuỗi?

Lợi ích của việc sử dụng chuỗi làm khóa như trái ngược với việc chỉ nhập tên dự định vào?

Ví dụ, nói tôi xác định hai đối tượng k1k2 như vậy:

var k1 = { a: 1, b: 2, c: 3 };   // define name normally 
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string 

Và sau đó tôi chạy cái test sau:

alert(k1 == k2);     // false (of course) 

alert(k1.a == k2.a);    // true 
alert(k1["b"] == k2["b"]);   // true 

alert(uneval(k1));     // returns the k1 object literal notation. 
alert(uneval(k2));     // returns the same string as above line. 

alert(uneval(k1) == uneval(k2)); // true 

Vì vậy, điểm của việc có các phím được là những gì dấu ngoặc kép (một chuỗi) như trong cách k2 được xác định thay vì chỉ cần gõ các tên khóa như trong cách thức k1 được xác định?


Tôi chỉ thấy trên này tại Ajaxian trỏ đến Aaron Boodman's blog entry:

chromium.tabs.createTab({ 
"url": "http://www.google.com/", 
"selected": true, 
"tabIndex": 3 
}); 

Kể từ khi ông cũng sử dụng trường hợp lạc đà cho tabIndex, tôi không thấy bất kỳ điểm nào trong việc sử dụng một chuỗi ở tất cả.

Tại sao không:

chromium.tabs.createTab({ 
url: "http://www.google.com/", 
selected: true, 
tabIndex: 3 
}); 

Tại sao một ninja JS theo quy ước của biến url, selectedtabIndex thành một chuỗi?

Trả lời

6

JSON là tập con của cú pháp JavaScript thực tế. Để đơn giản trong việc triển khai các trình phân tích cú pháp JSON, các dấu ngoặc kép luôn được yêu cầu xung quanh các chuỗi và do các khóa trong JSON là các chuỗi, chúng được yêu cầu ở đó.

Không phải tất cả JavaScript hợp pháp đều là JSON hợp pháp. Trong khi bạn có thể xác định các đối tượng literals trong JavaScript mà không có dấu ngoặc kép, nếu bạn muốn JSON tương thích, bạn sẽ cần phải đặt chúng.

+0

Tôi cho rằng quy ước trong javascript vừa bị rò rỉ vì đã làm việc với nhiều JSON rồi ... – chakrit

+0

Tôi tin rằng khả năng tương thích python đã được đề cập như một lý do để báo giá – cobbal

+0

@chakrit Có. Ngoài ra, như được chỉ ra bởi gizmo, nó thường an toàn hơn để sử dụng dấu ngoặc kép trong JavaScript vì bạn không phải lo lắng về các từ dành riêng.Ví dụ {do: "something"} không phải là JavaScript hợp lệ. –

1

Vì làm như vậy, bạn tránh sử dụng, do lỗi, một từ khóa dành riêng javascript, chẳng hạn như "làm" chẳng hạn. Sử dụng ký hiệu chuỗi giữ cho bạn ở bên an toàn.

0

Nếu sơ đồ cú pháp tại json.org được tin, tên thuộc tính của thanh chắn không chuẩn. Bạn đã chạy thử nghiệm bao nhiêu trình duyệt?

+0

Không nhiều ... nhưng tôi * duy trì một ứng dụng javascript lớn tại nơi làm việc. Và tôi luôn sử dụng tên bareword (ví dụ: tạo lớp và như vậy) và nó hoạt động trong tất cả các trình duyệt chính ... IE FF Opera Safari. – chakrit

+0

JSON là một tập hợp con của JavaScript. Nó yêu cầu báo giá, nhưng JavaScript thì không. –

0

Ngoài việc tránh xa các từ khóa dành riêng bạn thực sự có thể sử dụng bất cứ ký tự trong tên tài sản của bạn - bao gồm khoảng trắng, dấu hai chấm ...

Không thực sự chắc chắn lý do tại sao bạn sẽ làm điều đó. Tôi thích sử dụng ký hiệu "đối tượng" bình thường.

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