과거의 가장 짧은 판단은 IE가 수직 탭을 지원하지 않는 기능으로 이루어졌습니다.
코드 사본은 다음과 같습니다.
var IE =!+"/v1";
단 7/4 만 필요합니다! 이 기사를 참조하십시오. "32 바이트, EHR ... 9, EHR ... 7 !!! 브라우저인지 알아 보려면 외국인이 IE의 판단을 32 바이트에서 7 바이트로 줄인 방법에 대한 이야기를 들려줍니다! 그러나이 기록은 올해 1 월 8 일 러시아인에 의해 깨졌습니다. 이제 6 바이트 만 필요합니다! 처리 어레이에서 IE와 표준 브라우저의 차이를 사용합니다. 표준 브라우저의 경우 배열의 마지막 문자가 쉼표 인 경우 JS 엔진이 자동으로 제거됩니다.
코드 사본은 다음과 같습니다.
var IE =!-[1,];
이 코드는 IE9 이전의 세계에서 가장 짧은 IE 판단 코드라고 불렀습니다. 코드는 짧지 만 기본적인 JavaScript 지식이 많이 포함되어 있습니다. 이 예에서는 코드가 실행되면 배열의 ToString () 메소드가 먼저 호출됩니다. IE6에서 [1,]. toString ()을 실행합니다. 7, 8은 "1,"를 얻습니다. 그런 다음 표현이됩니다!-"1,". 그런 다음 "1,"를 숫자 유형으로 변환하여 NAN을 얻은 다음 음의 NAN을 사용하여 여전히 값을 얻습니다. 마지막으로 실행! Nan은 True를 반환합니다. 다음은이 진술을 분해하여 코드와 관련된 JavaScript 지식을 검토하는 것입니다.
1. 브라우저의 배열 문자 구문 분석 차이
[1,]는 배열이 JavaScript의 배열 리터럴을 사용하여 정의되었음을 의미합니다. IE6, 7, 8에는 배열의 두 가지 요소가 있으며 배열의 값은 1이며 정의되지 않았습니다. 표준 브라우저에서, 첫 번째 요소 후 정의되지 않은 것은 무시되고 배열에는 하나의 요소가 포함됩니다.
2. 배열의 toString () 메소드
배열 객체의 toString () 메소드를 호출 할 때 배열의 각 요소에서 toString () 메소드가 호출됩니다. 요소의 값이 null 또는 정의되지 않은 경우 빈 문자열이 반환되고 각 항목의 값은 쉼표로 구분 된 문자열로 철자가 표시됩니다. ",".
3. 일회용 마이너스 연산자
단수 마이너스 연산자를 사용하는 경우 작업 번호가 숫자 유형 인 경우 작업 번호를 직접 무효화합니다. 그렇지 않으면 먼저 작동 번호를 숫자 유형으로 변환하려고합니다. 변환 프로세스는 숫자 함수를 실행하는 것과 같습니다.
4. 논리적 비수기
논리적 비 운영을 수행 할 때 피연산자가 NAN, NULL 또는 정의되지 않은 경우 TRUE를 반환합니다.
JavaScript는 다음과 같이 작성할 수 있습니다.
코드 사본은 다음과 같습니다.
var IE =!-[1,];
경고 (즉,);
우리가 아닌 관점에서 판단한다면, 우리는 호환되면 대부분의 시간, 즉 비가 시작된 구조와 비트를 절약 할 수 있습니다. var notie = -[1,];
코드 사본은 다음과 같습니다.
if (-[1,]) {
경고 ( "이것은 브라우저가 아닙니다!");
}또 다른{
경고 ( "이것은 브라우저입니다!");
}
위의 지식으로부터, 우리는 코드 var ie =!-[1,]를 얻을 수 있습니다. 실제로 var ie =! (-숫자 ([1,]. tostring ())); IE6/7/8의 값은 사실입니다.
IE6/7/8은 버그를 무시하지 않기 때문에 [1,]. toString (), 즉, 당신이 얻는 것은 "1,"; 및 -number ([1,]. tostring ())은 -number ( "1,") 결과는 nan입니다. 그런 다음! (-number ([1,]. tostring ()))는! (nan)은 참입니다. 모든 것의 전제는 ie6/7/8에 버그 [1,]. toString () => "1"이 있고 다른 브라우저 (대부분 ~~이어야한다)는 [1,]. tostring () => "1"입니다.
최근에 친구가 이것을 사용하여 사용자가 브라우저를 업그레이드하도록 촉구했다는 것을 알았습니다.
<cript>!-[1,] && alert ( '브라우저의 IE6-8 버전을 사용하고 있습니다. Chrome, Firefox, IE9+를 사용하여/n/n!'); </script>