IT

"true"== true가 JavaScript에서 false를 표시하는 이유는 무엇입니까?

lottoking 2020. 9. 25. 08:17
반응형

"true"== true가 JavaScript에서 false를 표시하는 이유는 무엇입니까?


MDC는 ==연산자를 다음과 같이 설명합니다 .

두 피연산자가 동일한 유형이 아닌 경우 JavaScript는 피 연산 튼 변환 한 다음 엄격한 비교를 적용합니다. 피연산자가 숫자 또는 부울이면 피연산자는 가능한 경우 숫자로 변환됩니다. 복수의 언어로 변환됩니다.

이를 염두에두고 "true" == true다음과 같이 평가 합니다.

  1. 같은 유형입니까? 아니
  2. 피연산자가 숫자 또는 부울입니까?
  3. 둘 다 숫자로 변환 할 수 있습니까? 아니요 ( isNaN(Number("true")) // true)
  4. 피 연산에 있습니까?
  5. 다른 피 연산 데이터 복제로 변환 할 수 있습니까? ( String(true) === "true" // true)

평가되어야 하는 것 "true"및로 끝났지 만 JavaScript는 거짓을 표시합니다."true"true

내가 무엇을 놓쳤습니까?


은로 "true"CHAPTER 2 되기 때문에 NaN잠시 true로 변환됩니다 1. 그래서 많은 것입니다.

당신이보고 한 것처럼, 둘 다 숫자로 변환됩니다. 적어도 왜냐하면 true될 수 있기 때문입니다 (에릭 Reppen의 코멘트 참조).


== Ecma 5에 정의 된 비교 연산자

  1. Type (x)가 Number이고 Type (y)가 String이면 비교 결과 x == ToNumber (y)를 반환합니다.
  2. 유형 (x) 가이 고이고 유형 (y)가 숫자이면
  3. Type (x)가 Boolean이면 비교 결과를 반환합니다. ToNumber (x) == y.
  4. Type (y)가 Boolean이면 비교 결과 x == ToNumber (y)를 반환합니다.

따라서 "true"== true는 js 엔진에서 다음과 같이 해석됩니다.

  1. "true"== toNumber (true)
  2. "참"== 1
  3. toNumber ( "true") == 1
  4. NaN == 1

===> 거짓


추상 평등 비교 알고리즘에 따르면

http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3

oprend 중 하나가 부울이고 다른 하나가 아닌 경우 부울은 숫자 0 또는 1로 변환 true == "true"거짓입니다.

참고 URL : https://stackoverflow.com/questions/11363659/why-does-true-true-show-false-in-javascript

반응형