Cách chính xác để diễn giải biểu thức javascript phức tạp này là gì?Biểu thức điều kiện javascript phức tạp
some_condition ? a = b : c = d = e;
Tiếp theo nguyên tắc điều hành được ưu tiên, tôi mong chờ nó là:
(some_condition ? a = b : c) = d = e;
Nhưng có vẻ như các nhóm thực sự là:
EDIT: (Các nhóm ban đầu là không rõ ràng. Xem bên dưới để cập nhật)
EDIT: some_condition ? a = b : (c = d = e);
Tại sao lại như vậy? (Và không có tôi đã không viết mã đó)
EDIT: Điều này dường như gợi ý rằng trong Javascript để nói ?:
có quyền ưu tiên cao hơn =
không hoàn toàn đúng. Như một ví dụ nữa:
x = y ? a = b : c = d = e;
Nếu ?:
có ưu tiên cao hơn =
(như trong C) sau đó các nhóm sẽ
x = ((y ? a = b : c) = (d = e));
nhưng khá (từ câu trả lời) những gì chúng tôi có là
x = (y ? a = b : (c = d = e));
Các ưu tiên tương đối của ?:
và =
dường như phụ thuộc vào nơi chúng xuất hiện trong biểu thức
Uh oh, tốt hơn hãy thoát ra khỏi [spec] (http://es5.github.com/) một lần nữa ... – zzzzBov
Đó là vì bạn chưa đưa ra dấu ngoặc vuông. Thử đặt dấu ngoặc đơn. Nó sẽ hoạt động như mong đợi. – sgowd
không thực sự .. nội tuyến nếu không yêu cầu dấu ngoặc đơn hoặc dấu ngoặc đơn. Kiểm tra câu trả lời của Simon West bên dưới. – MilkyWayJoe