2016-09-18 3 views
1

for 루프를 사용하여 for 루프를 내 객체의 첫 번째 속성 이후에 계속 사용할 수 없습니다.in 루프 in 재귀 함수가 완료되지 않음

하는 두 개의 값을 받아서는 같은 값 또는 값 또한 같은 속성을 가진 객체 인 경우에만 진정한 반환하는 함수, deepEqual을 쓰기이 4 장에서 웅변 자바 스크립트에서 질문입니다 deepEqual에 대한 재귀 호출 과 비교하면 동일합니다.

두 항목을 동일성으로 비교할 것인지 (=== 연산자 사용) 또는 해당 속성을 살펴 보려면 typeof 연산자를 사용할 수 있습니다. 두 값 모두에 대해 "개체"가 생성되면 을 자세히 비교해야합니다. 그러나 어리석은 예외를 계정으로 가져 가야합니다. 역사적인 사고에 의해 typeof null도 "개체"를 생성합니다. '여기'특성이 동일하지 않기 때문에 그것이 거짓 말을해야 할 때

function deepEqual(obj1, obj2) { 
    if ((typeof obj1 === 'object' && obj1 != null) && (typeof obj2 === 'object' && obj2 != null)) { 
    for (var property in obj1) { 
     if (property in obj2) { 
     return deepEqual(obj1[property], obj2[property]) 
     } else { 
     return false; 
     } 
    } 
    } else if (obj1 !== obj2) { 
    return false; 
    } else { 
    return true; 
    } 
} 

var obj = {object: 3, here: 1}; 
var obj2 = {object: 3, here: 2}; 

console.log(deepEqual(obj, obj2)); 

콘솔은, true를 돌려 :

여기 내 코드입니다. 결과물을 살펴보면 함수의 for for 루프가 첫 번째 속성 다음에서 종료되기 때문입니다. 루프가 계속되지 않는 이유에 대해 도와주세요.

답변

0

당신의 당신이 동일한 것을 deepEqual 경우 반환을 반복 계속 경우, 또는 반환 할 deepEqual

for (var property in obj1) { 
     if (property in obj2) { 
     // returning means no more looping.... 
     return deepEqual(obj1[property], obj2[property]) 
     } 

호출 할 때 함수에서 반환하기 때문에 첫 번째 특성을 넘어 이동할 수 없습니다 루프에 대한 그릇된.

+0

의견을 주셔서 감사합니다! 당신의 답은 의미가 있습니다. 리턴 값을 다음과 같이 바꾸면 작동합니다 :'if (! deepEqual (obj1 [property], obj2 [property])) false false. – runandrew