다음 코드를 만족하는 변수 tt가 있습니다. 코드가 실행된 후 errCount=0이고 어설션 함수는 정보를 경고하지 않습니다. 코드는 다음과 같습니다. 코드 복사 코드는 다음과 같습니다. <br> var tt=/* 여기에 tt를 정의하세요 */; > var errCount=0 //assertion 함수에서 주장 선언의 수를 기록하는 데 사용되는 전역 변수 <br>/* <br> Assertion 함수 <br> v가 false인 경우 함수 경고("assert error") 및 카운터 errCount를 누적합니다 <br> v가 true이면 아무것도 하지 않습니다. <br> */ <br> functionert(v) { <br> if (!v) { <br> Alert("assert error"); > errCount <br> } <br> } <br><br> 주장((tt || true) == false) <br> 주장((tt || false) == false) <br> 주장(( tt && true ) == true) <br> 주장((tt && false) == false) <br> 주장((true || tt) == true) <br> 주장((tt || true) == false) <br> 주장((false || tt ) == false) <br> 주장((tt || false) == false) <br> 주장((true && tt) == false) <br> 주장 ((tt && true ) == true) <br> 주장((false && tt ) == 거짓) <br> 주장((tt && false ) == 거짓) <br><br> 주장((tt ? true : 거짓) == 참) <br> 주장((tt == 거짓) == 참) <br> 주장((!tt == tt ) == 참) <br> 주장((tt '') == "false" ) <br> 주장(tt ~<br><br>Tongfa CSDN: JavaScript의 Magic Variables<br>이 질문은 직장 동료가 퇴근 후 테스트해 보라고 한 질문이었습니다. <br>다음과 같은 답변을 얻었습니다. <br>답은 다음과 같습니다. <br>var tt=new Object(false) <br>var tt=new Boolean(); 🎜>var tt=new Boolean(false); <br>이 질문을 통해 js의 유연성을 느낄 수 있고 js에 대한 이해가 깊어질 수 있습니다. <br>저는 코드에서 다음과 같은 판단을 자주 사용했습니다<br> (a){ <br> 경고('ok') <br>} <br>이제 이런 식으로 쓰는 것은 논리적으로 숨겨진 위험이 매우 큰 것 같습니다. <br>csdn에서 한 네티즌의 멋진 답변을 활용하겠습니다. 위의 문제를 설명하기 위해 <br>||는 다음과 같이 계산됩니다. 처음부터 의미 있는 반환이 발생하면 마지막 표현식이 반환됩니다(반드시 부울 값일 필요는 없음). &&는 다음과 같이 작동합니다. 첫 번째부터 시작하여 의미 없는 반환이 발생하면 그렇지 않으면 반환됩니다. 마지막 표현식(위와 동일) <br>은 다음과 같이 작동됩니다. 표현식의 값을 부정합니다( 표현이 아님을 참고하세요). <br>무의미한 것: 다음 6개: 0,null,undefine,"",false,NaN <br>이 외에는 의미가 있는 것으로 간주됩니다. <br>new Boolean(), new Boolean(false)은 객체이기 때문에 의미가 있지만 그 값이 false이므로 이렇게 보면 "의미 있는 false"라고 볼 수 있습니다. 모든 문제를 설명할 수 있습니다. <br>new Object(false)도 의미가 있고 값도 false이지만 유형은 Object이고 new Boolean()의 유형은 Boolean입니다. <br>한 가지 더 알림: || 및 && 두 연산자는 값에 대해 작동하지 않습니다. 즉, 연산 중 표현식의 값에 관계없이 표현식 자체에 대해 작동합니다. <br>이 두 연산자는 어떻게 작동합니까? 표현식을 평가하시겠습니까? <br>답변: 값에 관계없이 표현이 의미가 있는지 여부만 중요합니다. <br>표현식의 경우 의미 없는 항목은 6개뿐입니다. 새 메서드로 생성된 모든 개체는 동적 개체이며 의미 있는 개체로 간주됩니다. <br>두 가지 예: <br>1. ||new Boolean(false) <br>연산은 다음과 같습니다. <br>우선 0은 상수인데 우연히 무의미한 것 중 하나이므로 continue와 false도 의미 없는 것 중 하나입니다. , 계속해서 new Boolean(false)는 동적 객체이고 의미가 있으므로 위 연산의 결과는 new Boolean(false) <br>2.0||new Boolean(false)||true <br>입니다. 결과가 될까요? 많은 사람들이 주의를 기울이지 않으면 결과가 사실이라고 생각할 것이지만 이는 잘못된 것입니다. <br> 먼저 답에 대해 이야기해 보겠습니다. 결과는 위와 동일합니다. <br> 우선: 0은 상수이고, 우연히 의미 없는 것 중 하나이므로 continue new Boolean(false)은 동적입니다. 여기서 의미 있는 표현이 발견되었으므로 더 이상 계산이 필요하지 않습니다. 그래서 결과는 위와 같습니다. <br>====== <br>&& 연산자에도 동일하게 적용되므로 더 이상 말하지 않겠습니다. <br>주제 외: <br> 흥미로운 점은 답변이 나온 후 이 질문에 답변하기 위해 색다른 수단도 사용했다는 것입니다(오락용). <br><br><br>var tt=window[" 주장"]=new Function();<br> <strong>이 문장은 다음 두 줄의 코드를 의미합니다. </strong>function Assert(){} <br>function tt(){} <br>javascript는 중복을 허용합니다. 기능을 수행하며 실행 시 후자가 우선합니다. <br> </div>