2015-10-07 36 views
7

Tôi đang gặp khó khăn khi hiểu được ý nghĩa của sự kết hợp lũy thừa và mọi thứ khác (Phép nhân, Phân chia, v.v.) trong nhóm 14 của ưu tiên Javascript.Tính ưu tiên của toán tử Javascript

Source - MDN

Ba câu hỏi:

  1. ý nghĩa của việc kết hợp là gì từ phải sang trái và từ trái sang bên phải associativity trong một nhóm?
  2. Làm cách nào để biểu thức 2 ** 3 * 4 được lặp lại theo các quy tắc này và vẫn nhận được cùng một câu trả lời? 4 * 2 ** 3 tác phẩm ... có nghĩa là gì?
  3. Khi nào/làm thế nào điều này không tương đương với việc đơn giản hóa việc cho phép lũy thừa mức ưu tiên cao hơn?
+0

từ phải sang trái nghĩa là 2 ** 3 ** 4 = Math.pow (2, Math.pow (3, 4)); –

Trả lời

2

1) 2 ** 3 ** 4, là từ phải sang trái, là 2 ** (3 ** 4). 2/3/4, là liên kết từ trái sang phải, là (2/3)/4.

2/3) Tôi tin rằng 2 ** 3 * 4(2 ** 3) * 4. 2 * 3 ** 42 * (3 ** 4) (được đánh giá bởi es6fiddle).

Điều này không theo sau bảng; nhưng lũy ​​thừa phải được ưu tiên hơn phép nhân. Trộn từ trái sang phải và từ phải sang trái trong một xếp hạng ưu tiên là lạ. Trong thực tế, theo như tôi có thể thấy trong ES7 drafts, nó không phải là ở tất cả các xử lý ngữ pháp giống như cách *, /%, nhưng là một hoạt động đơn nhất (!).

Cũng lưu ý rằng không có động cơ nào khác ngoài Babel và Traceur có hỗ trợ cho ** tại thời điểm hiện tại, vì vậy phần lớn là học thuật tại thời điểm này. MDN là một wiki, và toán tử lũy thừa được thêm vào bởi một Mozillian; nhưng AFAIK vì Mozilla hiện không hỗ trợ **, nó không thực sự ghi lại cách Mozilla thông dịch ngôn ngữ.

+0

Cảm ơn bạn! Tôi bằng cách nào đó không grokk rằng exponentiation đã được thử nghiệm ... Tôi đoán tôi internalized nó như là một trở lại thiết yếu trong những ngày cũ xấu - Tôi nghĩ rằng đó là trong FORTRAN :) – NessBird

+0

Exponentiation là loại thiết yếu; nhưng bạn có 'Math.pow'. '**' chỉ là cú pháp. – Amadan

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