【问题标题】:Short hand if statement always returning true简写 if 语句总是返回 true
【发布时间】:2014-01-31 05:49:19
【问题描述】:

我有一个列出组的下拉菜单。每个组都包含一个属性(布尔值),用于确定组所有者是用户还是其他组

如果组所有者是用户,我会获取组 ownerID 并将其与用户数组进行比较以确定哪个用户与该 ID 匹配并将该用户设置为selectedOwner。但是,如果组所有者是一个组,我会尝试遍历我的所有组以找到匹配项并将该组设置为 selectedOwner

这是我的控制器功能:

$scope.groupOwner = function (){
    var temp = $scope.selectedGroup.ownerIsUser ? $scope.users : $scope.groups;
    var index = temp.length; 
    console.dir(temp);
    while(index--){
        if($scope.selectedGroup.owner === temp[index].id){
            $scope.selectedOwner = temp[index];
            console.log($scope.selectedOwner);
            break;
        };
    };      
};

每当更改下拉列表时,它都会调用groupOwner,它会检查selectedUser.ownerIsUser 属性以确定我应该查看哪个数组,usersgroups

但是,无论 selectedGroup 所有者属性设置为什么,temp 变量始终返回 true。

这是对象的样子:

User = { 
name: Demo Administrator,
id: 90,
domain: i:0#.w|itun\demoadmin_compulite,
email: ,
isAdmin: False
 }

selectedGroup =  { 
name: Test Group,
id: 10,
description: ,
owner: 88,
ownerIsUser: False
 }

HTML:

<div class="topRow">
    <label for="entityDropDown">Select a Group:</label>
    <select id="entityDropDown" ng-model="selectedGroup" ng-options="group as group.name for group in groups" ng-change="getGroupInfo(selectedGroup)"></select>
    <div class="delGroupBtn"><a>&#10006;</a>

    </div>
</div>

对象的控制台输出:

Object {name: "Test Group 4", id: "117", description: "", owner: "71", ownerIsUser: "False"…}
description: ""
id: "117"
name: "Test Group 4"
owner: "71"
ownerIsUser: "False"
__proto__: Object

已解决:

$scope.groupOwner = function (){
    //object stores string not booleans
    var isUser = $scope.selectedGroup.ownerIsUser === "True"? true : false;  
    var owner = isUser ? $scope.user : $scope.group;
    var index = owner.length; 
    console.dir(owner);
    while(index--){
        if($scope.selectedGroup.owner === owner[index].id){
            $scope.selectedOwner = owner[index];
            console.log($scope.selectedOwner);
            break;
        };
    };      
};

【问题讨论】:

  • 无意冒犯,但如果蝙蝠侠有拯救哥谭的希望,他不应该知道这些事情吗? ...:P
  • 请添加您如何将 selectedGroup 设置为 HTML 范围。
  • 其实我想我想通了。假应该是“假”。这是愚蠢的,因为这就是 xml 返回值的方式。谁能确认这是否可能是问题? JS 是区分大小写的吧。
  • 你也可以发布你的html代码吗?我想知道$scope.selectedGroup.ownerIsUser 的值是布尔值还是字符串
  • 该数据(UserselectedGroup)应该是 JavaScript 还是 JSON?因为两者都不是。

标签: javascript angularjs


【解决方案1】:

您的变量是“False”,而不是布尔值 false。“False”是一个字符串,它的计算结果始终为 true。

var temp = $scope.selectedGroup.ownerIsUser ? $scope.users : $scope.groups;

将始终设置temp = $scope.users

一些javascript控制台测试示例:

> a = "False"
> "False"
> b = false
> false
> testValue = a ? 1 : 2;
> 1
> testValue = b ? 1 : 2;
2

【讨论】:

  • 是的,我开始意识到该对象没有像我想象的那样包含布尔值。我添加了另一个 if 语句来检查字符串并返回 true 或 false。谢谢
【解决方案2】:

当前没有定义这个对象

selectedGroup:  { 
name: Test Group,
id: 10,
description: ,
owner: 88,
ownerIsUser: False
}

应该用所有变量值来定义

selectedGroup:  { 
name: Test_Group, // or 'Test Group'
id: 10,
description: '',
owner: 88,
ownerIsUser: false
}

【讨论】:

  • 是的,我认为我正在评估的属性是我在控制台中看到的字符串。这可能是我没有得到预期结果的原因。当我硬核 false 或 true 时,if 语句可以正常工作。
猜你喜欢
  • 2016-01-04
  • 2015-12-16
  • 2016-05-10
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多