2014-10-30 17 views
9

Trong khi cố gắng hiểu rõ sự khác biệt giữa nhà điều hành bình đẳng và nhà điều hành nhận dạng, tôi đã xem qua số article tại MSDN. và quyết định tạo một sơ đồ để tôi có thể có một bức tranh đẹp hơn. Bây giờ câu hỏi của tôi là, sơ đồ này có đúng không? hoặc tôi đang thiếu một cái gì đó? Nó cũng là sự hiểu biết của tôi rằng các nhà điều hành nhận dạng (===) sẽ làm việc khá nhiều theo cùng một cách, nhưng không cố gắng để chuyển đổi A và B thành boolean, số hoặc chuỗi, trong bước đầu tiên. Đúng không?tìm ra nhà điều hành bình đẳng javascript

Bạn có thể xem hình ảnh here quá:

enter image description here

Ok đây là điều thực sự, đó là một vấn đề nguyên tắc;)

enter image description here

+0

Làm tốt công việc với biểu đồ! –

+4

Không có "toán tử nhận dạng", mặc dù có một toán tử ngang bằng (bình đẳng). Nếu câu hỏi của bạn là "* không mô hình sơ đồ thuật toán so sánh trừu tượng được sử dụng cho toán tử' == '*", câu trả lời là "Không". Nơi tốt nhất để bắt đầu là đặc điểm kỹ thuật: [* Thuật toán so sánh bình đẳng trừu tượng *] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.3). – RobG

+0

Bạn có thể so sánh bài viết [* MSDN *] (http://msdn.microsoft.com/en-us/library/ie/ky6fyhws%28v=vs.94%29.aspx) tương đương với [* MDN * ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators). – RobG

Trả lời

4

là sơ đồ này chính xác?

No. Bạn nên sử dụng đặc tả ECMAScript cho Abstract Equality Comparison Algorithm để tạo sơ đồ. ToBoolean chắc chắn không phải là bước đầu tiên (nó không được sử dụng trong mọi bước).

hoặc tôi đang thiếu gì đó?

Có, rất nhiều.

Đó cũng là sự hiểu biết của tôi rằng toán tử nhận dạng (===) sẽ hoạt động tương tự, nhưng không cố chuyển A và B sang boolean, số hoặc chuỗi, trong bước đầu tiên. Đúng không?

Các Strict Equality Comparison Algorithm là gần như giống hệt với Abstract Equality Comparison Algorithm, có một khác biệt duy nhất nếu các loại lập luận khác nhau, và trong trường hợp đó có một trật tự chính xác, trong đó loại được thực hiện bình đẳng trước sự so sánh được thực hiện.

+0

Tuyệt vời, câu trả lời hay! – Overlord

+0

"và trong trường hợp đó, có một thứ tự chính xác trong đó các loại được thực hiện như nhau trước khi so sánh được thực hiện." Không hẳn. Để so sánh nghiêm ngặt các loại không được làm bằng nhau cả. Nếu chúng không bằng nhau thì câu trả lời đơn giản là * sai *. – Octopus

+0

@ Octopus — nhận xét đó áp dụng cho thuật toán bình đẳng trừu tượng, không nghiêm ngặt (như bạn nói, không chuyển đổi các loại). – RobG

-2

là sơ đồ này có đúng không?

No. Ngoài việc được bố trí khủng khiếp, nó gây hiểu nhầm và một phần sai.

Tôi có thiếu gì đó không?

Có. Bước đầu tiên, "cố gắng chuyển đổi A và B thành boolean, chuỗi hoặc số" là sai - đó không phải là bước đầu tiên trong số equality comparison algorithm. Ngoài ra, khi nào để chuyển đổi biến nào thuộc loại nào?

Sau đó, bước tiếp theo phải là loại phân biệt, thay vì liên tục yêu cầu các giá trị giống hệt nhau của một loại cụ thể.

Bước "cuối cùng" Họ có thể (loại) bị ép buộc vào bất kỳ trường hợp nào trong 5 trường hợp cuối cùng không? -> Loại kết hợp "thiếu chi tiết. Tất cả các chi tiết. Phần nào là phần có liên quan nhất của so sánh bình đẳng cẩu thả:

  • Loại nào có thể bị ép buộc?
  • Loại nào sẽ bị ép buộc?
  • Sự ép buộc của các giá trị hoạt động như thế nào?

Và không, sau khi bắt buộc thuật toán bắt đầu khá nhiều ngay từ đầu, không phải với câu hỏi về chuỗi.

Đó cũng là sự hiểu biết của tôi rằng toán tử nhận dạng (===) sẽ hoạt động tương tự, nhưng không cố chuyển A và B sang boolean, số hoặc chuỗi, trong bước đầu tiên.

Đó Bước đầu tiên là không rõ ràng trong các thuật toán thực tế, vì vậy số Trong thực tế, === hoạt động giống trừ bước cuối cùng, mà cưỡng ép giá trị thành các loại khác - thay vào đó, false được trả về.


Chỉnh sửa: Sơ đồ thứ hai của bạn chính xác (mặc dù vẫn có một số quyết định bố cục lạ).

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