【问题标题】:JavaScript boolean compare always failsJavaScript 布尔比较总是失败
【发布时间】:2012-06-13 14:23:46
【问题描述】:

这个布尔比较总是返回 false,但它在我的 getColumnsFunction() 中比较 false == false。它应该返回 true,我不知道为什么。代码如下:

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;
 }

这是 for 循环中所有字段的 console.log() 中的内容:

false "boolean_compare" false 

它们都等于 false,为什么布尔比较返回 false?

编辑:忘记了一个 '(' 它应该是 inArray(exlude, fields[x].name ) == false

【问题讨论】:

  • 不要使用for … in 来遍历数组元素。请改用常规的for 循环。
  • 代码中的实际比较在哪里?
  • @FabioCosta:在console.log 行中:fields[x].name == falsefields[x].name
  • fields[x].name 真的是布尔值吗?
  • 您应该阅读 JavaScript 中 arrayobject 之间非常显着的区别。数组是一种特殊类型的对象,但并非所有对象都是数组。

标签: javascript extjs4 boolean


【解决方案1】:

这个表达式:

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

将首先将名称与false 进行比较,由于它们不相等,它将调用inArray(exclude, false)。除非它是一个包含值 false 的数组,否则它将始终返回 false。

我认为你想要:

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

它将在数组中搜索名称,然后将结果与false 进行比较。

【讨论】:

    【解决方案2】:

    我猜字段名称没有明确定义为布尔值,所以在 extjs 中默认是字符串。您正在将 "false"false 进行比较。

    【讨论】:

    • 是的,这可能是它请测试一下
    【解决方案3】:

    您可以使用 FF 上的 firebug 或 Chrome 上的网络工具进行调试,我会这样做。
    但请给我们 jsfiddle 演示 jsfiddle

    但我认为可能是 console.log 与它有关我遇到了同样的问题一个不使用 console.log 使用警报测试它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      相关资源
      最近更新 更多