2012-10-30 7 views
0

PHP에서 제공되는 JSend에서 LZW 압축 풀기 프로그램을 자바 스크립트로 변환하려고하는데 저는 꽤 이해할 수없는 함수를 얻었습니다.JSend에서 LZW 압축 해제를위한 PHP 함수를 이해하는 데 문제가 발생했습니다.

private static function decompressLZW($aCodes) 
    { 
    $sData = ''; 
    $oDictionary = range("\x0000", "\xff"); 
    foreach ($aCodes as $sKey => $iCode) 
    { 
     $sElement = $oDictionary[$iCode]; 
     if (!isset($sElement)) 
      $sElement = $sWord . $sWord[0]; 
     $sData .= $sElement; 
     if ($sKey) 
      $oDictionary[] = $sWord . $sElement[0]; 
     $sWord = $sElement; 
    } 
    return $sData; 
    } 

이것은 내가 지금까지 자바 스크립트,하지만 내가 자바 스크립트에서이 프로그램을 실행할 때 무엇인가, 그것은 sWord 정의 및 PHP 함수보고되지 않는다는 불평, 나는이 '아무튼 표시되지 않습니다 오류가 발생합니까?

는 여기에 지금까지에 javscript에있는 내용은 다음과 같습니다

function decompressLZW(aCodes) { 
    var sData = ''; 
    var oDictionary = []; 

    for (var i = 0; i < 256; i++) { 
    oDictionary[String.fromCharCode(i)] = i; 
    } 

    for(var i=0, iLn = aCodes.length; i < iLn; i++) { 
    var sElement = oDictionary[aCodes[i]]; 

    if(!sElement) { 
     sElement = sWord + sWord[0]; 
    } 

    //some magic needs to happen here 
    } 

    return sData; 
} 

답변

1

음의 IMO 나쁜 종류하지만 .... $sWord는 본질적으로 반복의 끝 부분에서 정의된다 $sElement입니다. 루프의 적어도 하나의 실행 후에 만 ​​첫 번째 두 개의 if 문이 참인 경우는 $sWord이 이전 반복의 $sElement과 동일 할 것입니다.

임 확실하지 않은 것을 그 가정의 중요성은하지만 ... 그것은 나를 있다면 난 여전히 $sWord의 존재 여부를 테스트 할 그 일이 있다면 (이론적으로 발생해서는 안 경우에도) 예외가 발생

그래서 sElement = oDictionary[aCodes[i]];이 왜 진실인지 평가하지 않는 이유를 알아야합니다. loose falsy check 대신에 angainst undefined (더 많이 수행하는 것은 isset()) 테스트만큼 간단 할 수 있습니다.

if(sElement === undefined) { 
    sElement = sWord + sWord[0]; 
}