>  기사  >  웹 프론트엔드  >  JavaScript의 `==` 연산자가 모순되는 조건으로 진정한 평가를 생성할 수 있습니까?

JavaScript의 `==` 연산자가 모순되는 조건으로 진정한 평가를 생성할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 11:28:02436검색

Can JavaScript's `==` Operator Create True Evaluations with Contradictory Conditions?

충돌하는 조건이 있는 경우 논리적 교차가 참으로 평가될 수 있습니까?

유명 기술 기업이 제기한 흥미로운 인터뷰 질문에서 다음과 같은 질문이 제기됩니다. JavaScript에서 표현식(a == 1 && a == 2 && a == 3)이 true로 평가될 수 있습니까?

처음에는 겉보기에 모순되는 조건 특성을 고려할 때 이것이 믿기지 않는 것처럼 보일 수 있습니다. 그러나 JavaScript의 항등 연산자(==)를 자세히 살펴보면 이 수수께끼에 대한 답을 찾을 수 있습니다.

JavaScript의 항등 연산자는 엄격하게 동일한 연산자(===)와 달리 자동으로 유형 강제 변환을 수행합니다. 비교를 위해 값을 공통 유형으로 변환합니다. 이는 특히 동적 값 생성을 허용하는 사용자 정의된 toString(또는 valueOf) 함수를 사용하여 객체를 조작할 수 있는 가능성을 열어줍니다.

다음 예를 고려하세요.

const a = {
  i: 1,
  toString: function () {
    return a.i++;
  }
}

이 사용자 정의를 사용하면 toString 함수는 a가 암시적으로 문자열로 강제 변환될 때마다(예: 로깅을 위해) a의 내부 i 값이 증가합니다. 이는 세 가지 동등 조건을 모두 충족하는 메커니즘을 제공합니다.

a == 1 // true (initially i = 1)
a == 2 // true (after toString call, i = 2)
a == 3 // true (after second toString call, i = 3)

따라서 객체의 동적 동작과 ==의 암시적 유형 변환을 활용하여 (a == 1 && a == 2 && a == 3) JavaScript에서 true로 평가됩니다.

위 내용은 JavaScript의 `==` 연산자가 모순되는 조건으로 진정한 평가를 생성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.