2011-12-18 19 views
7

Khi cố gắng để truy cập vào các tài sản a của đối tượng {}Tại sao truy cập một thuộc tính trực tiếp trên một đối tượng bằng chữ ném một Cú pháp Cú pháp?

{}.a 

tôi nhận được lỗi

SyntaxError: Unexpected token . 

Với Parens tất cả là tốt:

({}).a 

Tại sao tôi lại nhận được một lỗi trong nắm tay? Có sự mơ hồ?

+0

cú pháp JavaScript chỉ không cho phép điều đó. – Eliasdx

+0

Biểu thức '{}' đánh giá đối tượng gốc mới không có thuộc tính riêng. Bạn đang cố truy cập một trong các phương thức 'Object.prototype'? –

+1

có thể trùng lặp của [Ngay lập tức truy cập thuộc tính của đối tượng] (http://stackoverflow.com/questions/7518538/immediately-accessing-an-objects-property) – RightSaidFred

Trả lời

15

Dấu ngoặc móc được hiểu là block statement, không phải là đối tượng theo nghĩa đen. Bạn không thể bắt đầu một câu lệnh biểu thức với dấu ngoặc nhọn bên trái.

Các trạng thái đặc điểm kỹ thuật:

LƯU Ý Một ExpressionStatement không thể bắt đầu với một khe hở xoăn cú đúp vì đó có thể làm cho nó rõ ràng với một Khối. Ngoài ra, ExpressionStatement không thể bắt đầu bằng từ khóa function vì có thể làm cho nó mơ hồ với FunctionDeclaration.

Nguồn: http://es5.github.com/x12.html#x12.4

1

các {} đang có để xây dựng các đối tượng. thường thì trước tiên bạn chỉ định đối tượng mới cho một biến.

var o = { 
    a: "b" 
}; 

console.log(o.a); 

nhưng điều này cũng có thể:

console.log({ 
    a: "b" 
}.a); 
Các vấn đề liên quan