检查对象属性值是否为false

时间:2017-08-25 16:28:59

标签: javascript arrays object if-statement

我似乎无法找到如何检查对象中的属性值是否为false的说明。我有这个代码,我试图检查属性是否活跃'是假的,但只有typeof data[i].active ==='undefined部分有效。

function createHTML(data) {
var myTable = document.getElementById('list');    
for(var i=0; i<data.length; i++) {
    var row = myTable.insertRow();
    for (var key in data[i]) {                
            var cell = row.insertCell();                
            if (data[i].hasOwnProperty(key) ) {                    
                cell.innerHTML = data[i][key];                    
                    if(typeof data[i].active === false || typeof 
                       data[i].active ==='undefined')  {
                        cell.innerHTML+= "<span class='eye'><i class='fa fa-
                        eye-slash'></i></span>";                             
                    } 
                }
            }  
        }

3 个答案:

答案 0 :(得分:1)

使用逻辑非运算符:

if (!data[i].active) {
  // data[i].active is false, 0, undefined, null
}
  

如果单个操作数不能转换为true,则返回false;否则,返回true。

答案 1 :(得分:1)

nullundefined0''false被评估为if内的 falsey 值语句。

在您的情况下,我们可以通过这种方式解决您的问题:

data[i].activefalsey值吗?

为了提高可读性,您可以创建辅助函数:

function isActive(item) { return item && !!item.active; }
function isNotActive(item) { return !isActive(item); }

现在您可以更改代码:

if(
  typeof data[i].active === false || 
  typeof data[i].active ==='undefined'
)  {}

if(isNotActive(data[i]))  {}

答案 2 :(得分:0)

如果你只想检查 false ,而不是所有的虚假值,如null,undefined,0等,那么使用 ===(triple equals)

所以你的代码变成了

if(data[i].active === false)  {
   cell.innerHTML+= "<span class='eye'><i class='fa fa-
   eye-slash'></i></span>";                             
 }