Tính đến Chrome 54 liên quan đến giao diện điều khiển:
Thật không may, tôi đã thêm các Clippy trích dẫn bản thân mình. Bảng điều khiển không cung cấp thông tin về những gì nó đã làm cho bạn.
Các quy định mới là vô cùng đơn giản tiết kiệm chúng tôi những rắc rối của chăm gõ những 2 charcters khó o=
hoặc 0,
trước khi dán Literals Object vào giao diện điều khiển:
- Nếu bạn có mã bắt đầu với: không bắt buộc khoảng trắng, (không cho phép nhận xét), theo sau là
{
;
- và mã đó có thể được hiểu là một đối tượng;
- và đối tượng mà được theo sau bởi không có mã số khác, trừ trường hợp:
- mã sau khi đối tượng đầu tiên là một nhà điều hành nhị phân,
- sau đó có thể có nhiều hoạt động như bạn muốn bao gồm các nhóm
- cung cấp thức toán tử có một đối tượng theo nghĩa đen ở vị trí bên phải;
- và Object thức chưa được nhóm lại trong dấu ngoặc
- và mã mà không được kết thúc bằng một dấu chấm phẩy
- và không có ý kiến như sau mã (bình luận nội bộ được phép miễn là họ không nằm trong ban đầu hoặc vị trí cuối cùng)
- và sau đó chỉ khi đó JavaScript của bạn (có thể hoặc không thực sự là mã hợp lệ) sẽ được tái xuất hiện làm Đối tượng hợp lệ. Bạn sẽ không được thông báo rằng mã của bạn đã được giải thích lại.
{wat:1}),({wat:2}
Cuối cùng lại là lỗi.
{let i=0;var increment=_=>i++}
được cho phép chính xác, cuối cùng, đây là cách khá tốt để thực hiện đóng cửa.
Tuy nhiên, sau đây là không chính xác một đối tượng, đây chỉ là một sự tiện lợi như đã đề cập bởi @Bergi, nó diễn giải JS sai để giúp bạn! Thông số kỹ thuật nói rằng đó là một khối có một câu lệnh có nhãn "foo" với chữ cái 1 không được gán cho bất kỳ thứ gì.
{foo:1}
Trên đây nên được giống như
if(1) {
foo: 1
}
Sau đây được xử lý một cách chính xác như một khối ... bởi vì nó có một bình luận ở phía trước của nó!
//magic comment
{foo:1}
Vì vậy, là thế này:
{foo:1}
//also magic
Đây là một đối tượng:
{foo:
//not so magic comment
1}
Đây là một lỗi
//not so magic comment
{foo:1}.foo
Vì vậy, là thế này:
{foo:1}.foo
Điều này là tốt:
1..wat
undefined
nên là thế này:
['foo'][0]
Người tiếp theo được giải thích một cách chính xác như một đối tượng đánh mạnh vào vị trí biểu hiện với một 0,
mà nói chung là cách chúng ta bảo đảm một cách rõ ràng chúng ta có một biểu thức thay vì một tuyên bố.
0,{foo:1}.foo
Tôi không hiểu tại sao chúng bao bọc giá trị theo tỷ lệ. JS có một số quyết định thiết kế vô lý, nhưng cố gắng làm cho nó hoạt động tốt hơn trong tình huống này không thực sự là một lựa chọn, giao diện điều khiển cần chạy JS một cách chính xác, và chúng ta cần phải tự tin rằng chrome không chỉ đoán rằng nó nghĩ rằng chúng ta thực sự có nghĩa là nó làm điều gì đó khác.
Nếu bạn không thích các nhà khai thác dấu phẩy bạn có thể sử dụng phân
x = {foo:1}.foo
Bởi vì như nó đứng
{} + {} + {}
"[object Object][object Object][object Object]"
;{} + {} + {}
"NaN[object Object]"
Điên và nhất quán tôi có thể đối phó với ... điên rồ và mâu thuẫn không cảm ơn bạn!
Hãy thử '{} + {} + 1' và bạn sẽ thấy' NaN' lần nữa, trong khi '({} + {}) + 1' sản lượng' "[đối tượng Object] [đối tượng] 1" ' . – Hypaethral
có vẻ như chrome hiện xử lý thao tác này dưới dạng chuỗi ký tự thay vì thêm. TẠI SAO đó là, tôi không biết, đó là lý do tại sao đây là một bình luận không phải là một câu trả lời :) thử 'var e = {}; e.toString() 'và bạn sẽ thấy ý tôi là gì – sgroves
đó là tất cả về loại cưỡng chế (trong trường hợp cực đoan) .... BTW type' + {} 'vẫn trả về NaN – maioman