2016-12-14 17 views
9

Tôi không hiểu tại sao những điều sau đây để đánh giá 3 thay vì chỉ tuyên bố một lỗi cú pháp khi chạy từ một REPL JavaScript hoặc thông qua Công cụ nhà phát triển Chrome:Sử dụng ký pháp đối tượng như thể nó là một mảng - tại sao điều này lại đánh giá?

{1, 2, 3}; 
3 

Theo như tôi thấy, mà nên là lỗi cú pháp như được minh họa bằng:

var foo = {1, 2, 3}; 
Uncaught SyntaxError: Unexpected token , 

Tôi cảm thấy có một số hành vi kỳ quặc mà tôi không biết?

+1

"Tôi cảm thấy như chỉ có một số hành vi kỳ quặc mà tôi không biết?" -> đó là bằng chứng về sự hiểu biết thực tế về Javascript! –

Trả lời

12

Đây là sự sụp đổ của biểu tượng:

  • { đang Bắt đầu khối
  • 1 Số đen
  • , Comma điều hành (đánh giá cả hai bên, bên phải trả)
  • 2 Số đen
  • , Nhà điều hành mạng lưới
  • 3 khối Số đen
  • } End đang

khối Mã không bị giới hạn để xác định if, while, vv khối, họ có thể được sử dụng bất cứ nơi nào. Vì vậy, mã của bạn chỉ đơn giản là một khối có chứa chuỗi chuỗi dấu phẩy, chuỗi trả về mục cuối cùng trong chuỗi, do đó 3.

Trong trường hợp var foo = {1, 2, 3};, { thực sự là biểu tượng "bắt đầu bằng chữ" và không phải là biểu tượng "khối mã bắt đầu".

Biểu tượng tương tự có thể có nhiều ý nghĩa dựa trên ngữ cảnh.

+0

Nó đánh tôi khi tôi đã đến điểm bullet đầu tiên của bạn, cảm ơn :) Sẽ chấp nhận một khi SO cho thấy số tiền chính xác của thời gian đã trôi qua. –

+0

có giá trị trả về 'mã khối' không? – Mahi

+0

Khối mã được đánh giá, có. –

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