2014-10-30 2 views
9

평등 연산자와 ID 연산자의 차이점을 완전히 이해하려고 시도하면서 MSDN에서 article을 만났습니다.이 두 연산자는 내부 동작에 대해 설명하지만 몇 가지 의문점이있었습니다. 그리고 더 좋은 그림을 가질 수 있도록 순서도를 만들기로 결정했습니다. 이제 제 질문은이 흐름도가 맞습니까? 또는 나는 무엇인가 놓치고 있냐?자바 스크립트 평등 연산자 알아 내기

아이덴티티 연산자 (===)는 거의 같은 방식으로 작동하지만 첫 번째 단계에서는 A와 B를 부울, 숫자 또는 문자열로 변환하지 않고도 이해할 수 있습니다. 그 맞습니까?

당신은 너무 이미지 here 볼 수 있습니다;

enter image description here

+0

잘 했어! –

+4

"동일성 연산자"가 없으며 엄격한 등호 연산자가 있습니다. 귀하의 질문이 "*"이면 흐름도가'=='연산자 * "에 사용되는 추상 비교 알고리즘을 모델링합니까? 대답은"아니오 "입니다. 시작하는 가장 좋은 장소는 사양입니다 : [* 추상 평등 비교 알고리즘 *] (http://ecma-international.org/ecma-262/5.1/#sec-11.9.3). – RobG

+0

당신은 [에 상당하는 [* MSDN *] (http://msdn.microsoft.com/en-us/library/ie/ky6fyhws%28v=vs.94%29.aspx) 기사를 비교할 수 * MDN * ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators). – RobG

답변

4

이 흐름도이다) 여기

enter image description here

좋아 진짜, 그것은 원칙의 문제였다 옳은?

아니요. Abstract Equality Comparison Algorithm에 ECMAScript 사양을 사용하여 순서도를 만들어야합니다. ToBoolean은 확실히 첫 번째 단계는 아닙니다 (단계에서는 단계에 사용되지 않음).

또는 뭔가 빠졌습니까?

예, 많이 있습니다.

이 신원 연산자 (===)이 있지만 첫 번째 단계에서, 숫자 또는 문자열을 논리 값으로 A와 B를 변환하는 시도하지 않고 거의 같은 방식으로 작동합니다 나의 이해는합니다. 그 맞습니까?

Strict Equality Comparison AlgorithmAbstract Equality Comparison Algorithm 거의 동일 인수 종류가 다른 경우에만 차이가 있고, 그 경우에 비교되기 전에 유형이 동일하게되는 정확한 순서로 존재한다.

+0

훌륭하고 좋은 답변입니다! – Overlord

+0

"이 경우에는 비교가 이루어지기 전에 유형이 동일하게 만들어지는 정확한 순서가 있습니다." 그렇지 않아. 엄격한 비교를 위해 형식이 전혀 동일하지 않습니다. 만약 그들이 동일하지 않다면 그 대답은 간단히 * 거짓 *입니다. 문어, 즉 주석 @ – Octopus

+0

는 추상적 평등 알고리즘을 적용, (이, 당신이 말한대로, 형식을 변환하지 않음) 엄격하지. – RobG

-2

이 순서도가 맞습니까?

아니요. 레이아웃이 잘못되었다는 것 외에도 오도 된 부분적으로 잘못된 것입니다.

내가 누락 된 항목이 있습니까?

예. 첫 번째 단계는 "A와 B를 부울, 문자열 또는 숫자"으로 변환하려고 시도하는 것이 잘못되었습니다. 즉 equality comparison algorithm의 첫 번째 단계는 아닙니다. 또한 어떤 유형의 변수를 변환해야합니까?

그런 다음 다음 단계는 특정 유형의 동일한 값을 반복적으로 묻는 대신 형식을 구분해야합니다.

"마지막"단계 "(유형)이 마지막 5 가지 상황 중 하나에 강제 적용될 수 있습니까? -> 강제 유형"세부 사항이 부족합니다. 모든 세부 사항. 부적절한 동등 비교의 가장 중요한 부분은 다음과 같습니다.

  • 강제로 적용 할 수있는 유형은 무엇입니까?
  • 어떤 종류의은에 강요 할 것인가?
  • 어떻게 값의 강제 작동합니까?

그리고 강요 이후 알고리즘은 처음에는 문자열에 관한 질문이 아니라 시작과 거의 같습니다.

이 신원 연산자 (===)이 있지만 첫 번째 단계에서, 숫자 또는 문자열을 논리 값으로 A와 B를 변환하는 시도하지 않고 거의 같은 방식으로 작동합니다 나의 이해는합니다.

먼저 실제 알고리즘 명백 아니므 호 사실, === 다른 유형에 값을 강제 변환 마지막 단계 제외한 동일한 를 작동

- 대신 false 반환된다.


편집 : 두 번째 다이어그램은 정확하고 (정확함), 여전히 이상한 레이아웃 결정을 특징으로합니다. 차트와