2012-06-13 3 views
0

이 부울 비교는 항상 false를 반환하지만 getColumnsFunction()에서는 false == false를 비교합니다. 그것은 사실로 돌아 가야하고, 나는 이유가 없다.JavaScript 부울 비교는 항상 실패합니다.

다음
function getModelColumns(exlude, modelName){  
    var model = Ext.ModelManager.getModel(modelName).create(); 
    var fields = model.fields.items; 

    for(var x in fields){ 
     console.log(inArray(exlude, fields[x].name == false), 
        'boolean_compare', 
        inArray(exlude, fields[x].name)); 
    } 

} 
function inArray(arr,val){ 
    for(var x in arr){ 
     if(arr[x] === val) 
      return true; 
    } 

    return false; 
} 

이 CONSOLE.LOG (에 무엇을) 루프는 점에서 모든 필드에 :

false "boolean_compare" false 

그들은 도대체 그 부울 않는 이유, 거짓과 동일 모두 여기에 코드입니다 비교가 false를 반환합니까?

편집 : 거짓 '('그것이 있어야 inArray (exlude, 필드 [X] .name을) ==

+0

배열 요소를 반복 할 때'for ... in'을 사용하지 마십시오. 대신에'for' 루프를 사용하십시오. –

+0

코드에서 실제 비교는 어디입니까? – FabioCosta

+1

@FabioCosta :'console.log' 줄에서'fields [x] .name == false'와'fields [x] .name'입니다. –

답변

3

이 표현 :

inArray(exlude, fields[x].name == false) 

먼저 false에 이름을 비교하며, 동일하지대로 inArray(exclude, false)를 호출합니다. 값이 false 인 배열이 아니라면 항상 false를 반환합니다. 배열의 이름을 검색합니다

inArray(exlude, fields[x].name) == false 

false에 결과를 비교 :

난 당신이 원하는 생각합니다.

1

내가 필드 이름을 추측하고있어 잊어 명시 적으로에 extjs에, 그래서 부울로 정의되지 않은 기본값은. 당신은 false"false"를 문자열 비교하고있다.

+0

나중에 테스트 해보세요. – shareef

0

당신은 내가.
그것을 할하지만 jsfiddle

우리에게 jsfiddle 데모를 줄 것이다 크롬에서 FF 또는 웹 도구에 불을 지르고으로 디버깅 할 수 있습니다하지만 난 것 같아요 console.log에는 그 콘솔과 동일한 문제가 있습니다. .log 경고 테스트를 사용하십시오.

관련 문제