2012-06-13 92 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]。名稱)==假

+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

您可以在Chrome上FF或網絡工具Firebug的調試,我會做到這一點。
但給我們就可以了jsfiddle

的jsfiddle演示,但我認爲可能是console.log與它有關,我得到了同樣的問題,一個不使用控制檯.log使用alert來測試它。