Câu trả lời:
Không, các trích dẫn không tạo ra sự khác biệt (trừ khi, như bạn đã lưu ý, bạn muốn sử dụng một khóa không phải là định danh JavaScript hợp lệ).
Là một lưu ý phụ, định dạng trao đổi dữ liệu JSON không yêu cầu dấu ngoặc kép xung quanh số nhận dạng (và không cho phép dấu ngoặc đơn).
Từ tên thuộc tính / khóa đối tượng không được trích dẫn trong JavaScript , bài viết của tôi về chủ đề:
Báo giá chỉ có thể được bỏ qua nếu tên thuộc tính là một chữ số hoặc tên định danh hợp lệ .
[Càng]
Ký hiệu khung có thể được sử dụng một cách an toàn cho tất cả các tên thuộc tính.
[Càng]
Ký hiệu chấm chỉ có thể được sử dụng khi tên thuộc tính là tên định danh hợp lệ.
Lưu ý rằng các từ dành riêng được phép sử dụng làm tên thuộc tính không được trích dẫn trong ES5. Tuy nhiên, để tương thích ngược với ES3, tôi vẫn khuyên bạn nên trích dẫn chúng.
Tôi cũng đã tạo một công cụ sẽ cho bạn biết nếu có bất kỳ tên thuộc tính cụ thể nào có thể được sử dụng mà không có dấu ngoặc kép và / hoặc có ký hiệu dấu chấm. Hãy thử nó tại Mothereff.in/js-properies .
Không có sự khác biệt ở đây. Chỉ là một vấn đề của phong cách. Một trong những lý do để làm điều này là có thể sử dụng 'siêu' hoặc 'lớp' làm khóa vì đó là những từ khóa dành riêng.
Một số người có thể bị cám dỗ để vượt qua trong một chuỗi có khoảng trắng sau đó gọi o ['Tôi có thể có khoảng trắng'] Nhưng tôi sẽ gọi đó là thực tiễn xấu.
Không, không vào javascript. Tuy nhiên, một số trình phân tích cú pháp JSON sẽ thất bại khi không có dấu ngoặc kép quanh các khóa.
Có một số tình huống mà chúng khác nhau. Ví dụ: nếu bạn đang sử dụng jQuery và bạn đang tạo một danh sách các tham số cần truyền khi gọi lệnh jQuery $ () để tạo một phần tử, các từ được trích dẫn được chuyển thành tham số và các từ không trích dẫn được chuyển thành hàm. Ví dụ: "size" sẽ đặt thuộc tính kích thước của đối tượng và kích thước (không có dấu ngoặc kép), sẽ gọi hàm size () trên đối tượng. Xem jQuery () , gần cuối trang:
Mặc dù đối số thứ hai là thuận tiện, tính linh hoạt của nó có thể dẫn đến các hậu quả không lường trước được (ví dụ $ ("
<input>", {size: "4"}) gọi phương thức .size () thay vì đặt thuộc tính kích thước). Do đó, khối mã trước đó có thể được viết thay vì:
obj = { 12e34: true };không giống nhưobj = { '12e34': true };. Cái trước sẽ yêu cầu bạn truy cập vào tài sản thông quaobj['1.2e+35'], trong khi đối với cái sau bạn sử dụngobj['12e34']. Xem câu trả lời của tôi để biết thêm chi tiết.