2016-03-11 15 views

Trả lời

35

{a:1,b:2}.constructor không phải là cú pháp không hợp lệ, nhưng nó không rõ ràng, vì {} biểu thị một khối hoặc một đối tượng? Vì vậy, bạn phải phân biệt biểu thức với dấu ngoặc đơn, như ({a:1,b:2}).constructor. Bây giờ JavaScript biết bạn có ý định sử dụng một đối tượng.

Nếu bạn sử dụng cú pháp trong một bối cảnh mà nó rõ ràng là một đối tượng, sau đó không có sự mơ hồ:

console.log({a:1,b:2}.constructor) // works fine 
13

Dấu ngoặc nhọn ở đầu dòng được nhận dạng là code block thay vì object literal.

Nếu bạn nhìn vào lỗi trong bảng điều khiển, bạn có thể xem Uncaught SyntaxError: Unexpected token :. Vì vậy, lỗi không được gọi là nhà xây dựng constructor.

Ngoài ra, khi bạn viết trong giao diện điều khiển

{a:1} 

JS giải thích điều này như một khối với một label và không phải là một đối tượng với tài sản a.

+0

gì một ' dòng'? Ngôn ngữ phụ thuộc vào dấu chấm phẩy (đặc biệt là JS với các quy tắc hài hước) không biết về 'dòng'. Nhưng '; {1: 2} .constructor' không hợp lệ. Có lẽ bạn có nghĩa là 'statement' hoặc' expression' trên 'line'? – cat

+1

@tac, yep, 'statement' ở đây có vẻ chính xác hơn – Grundy

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