Tôi nghĩ câu trả lời đúng cho câu hỏi của Cheeso là việc triển khai vượt qua tài liệu. Nó không còn yêu cầu một chuỗi làm khóa, mà là một cái gì đó khác, có thể là một chuỗi (tức là được trích dẫn) hoặc (có thể là) bất kỳ thứ gì có thể được sử dụng làm tên biến, mà tôi sẽ đoán nghĩa là bắt đầu bằng một chữ cái, _ , hoặc $, và chỉ bao gồm các chữ cái, số và $ và _.
Tôi muốn đơn giản hóa phần còn lại cho người tiếp theo truy cập câu hỏi này với cùng ý tưởng tôi đã làm. Đây là thịt:
Tên biến không được nội suy trong JSON khi được sử dụng làm khóa đối tượng (Cảm ơn Friedo!)
Breton, sử dụng "số nhận dạng" thay vì "khóa", đã viết rằng "nếu một số nhận dạng tình cờ là một từ dành riêng, nó được hiểu là từ đó chứ không phải là một định danh." Điều này có thể đúng, nhưng tôi đã thử nó mà không gặp bất kỳ sự cố nào:
var a = {do:1,long:2,super:3,abstract:4,var:5,break:6,boolean:7};
a.break
=> 6
Về việc sử dụng dấu ngoặc kép, Quentin đã viết "... nhưng bạn không cần phải làm như vậy, trừ khi [khóa] chứa các ký tự nhất định (hoặc kết hợp các ký tự khiến nó trở thành từ khóa)"
Tôi thấy phần trước (một số ký tự nhất định) là đúng, sử dụng dấu @ (trên thực tế, tôi nghĩ $ và _ là các ký tự duy nhất không gây ra lỗi):
var a = {a@b:1};
=> Lỗi cú pháp
var a = {"a@b":1};
a['a@b']
=> 1
nhưng dấu ngoặc đơn về từ khóa, như tôi đã trình bày ở trên, không đúng.
Những gì tôi muốn hoạt động vì văn bản giữa dấu mở đầu {và dấu hai chấm, hoặc giữa dấu phẩy và dấu hai chấm cho các thuộc tính tiếp theo được sử dụng như một chuỗi không được trích dẫn để tạo khóa đối tượng, hoặc, như Friedo đã nói, một tên biến ở đó không ' t được nội suy:
var uid = getUID();
var token = getToken(); // Returns ABC123
var data = {uid:uid,token:token};
data.token
=> ABC123