var 즉 = !-[1,];
이 코드는 IE9 이전에는 세계에서 가장 짧은 IE 판단 코드로 불렸습니다. 코드는 짧지만 기본적인 JavaScript 지식이 많이 담겨 있습니다. 이 예에서는코드가 실행되면 먼저 배열의 toString() 메서드를 호출하고 [1 ,].toString() IE6,7,8에서는 "1,"을 얻게 됩니다. 그러면 표현식은 !-“1,”이 됩니다. "1"을 숫자 유형으로 변환하여 NaN을 얻은 다음 음수 NaN을 변환하여 여전히 NaN 값을 얻으세요. 마지막으로 !NaN을 실행하고 true를 반환합니다. 다음 명령문을 분해하여 코드에 포함된 javascript 지식을 검토해 보겠습니다.
브라우저 간 배열 리터럴 구문 분석의 차이점
[1,]은 JavaScript의 배열 리터럴을 사용하여 배열을 정의한다는 의미입니다. IE6, 7, 8에서는 배열에 두 개의 요소가 있으며 배열의 값은 각각 1과 정의되지 않습니다. 표준 브라우저에서는 첫 번째 요소가 무시되고 배열에 하나의 요소인 1만 포함된 후에는 정의되지 않습니다.
배열의 toString() 메서드
배열 객체의 toString() 메서드를 호출하면 배열의 각 요소에 대해 toString() 메서드가 호출됩니다. 요소의 값이 NULL이거나 정의되지 않은 경우 빈 문자열이 반환됩니다. , 그리고 각각 획득된 항목의 값은 쉼표 ","로 구분된 문자열로 철자됩니다.
단항 빼기 연산자
단항 빼기 연산자를 사용할 때 피연산자가 숫자 유형이면 피연산자가 직접 음수화됩니다. 그렇지 않으면 먼저 피연산자 를 변환하려고 시도합니다. 숫자 유형으로 변환하는 과정은 Number 함수를 실행한 다음 음수 결과를 얻는 것과 같습니다.
논리적 NOT 연산
논리적 NOT 연산을 수행할 때 피연산자가 NaN, NULL 또는 정의되지 않은 경우 true를 반환합니다.
위의 지식을 바탕으로 var ie = !-[1,]; 실제로 var ie = !과 동일한 코드를 도출할 수 있습니다. (-Number([1,].toString())); IE678에서는 값이 true입니다. 분석 내용에 잘못된 부분이 있거나, 다른 의견이 있다면 정정해주세요!