충돌하는 조건이 있는 경우 논리적 교차가 참으로 평가될 수 있습니까?
유명 기술 기업이 제기한 흥미로운 인터뷰 질문에서 다음과 같은 질문이 제기됩니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!