检查对象属性值是否为false

3

我似乎找不到如何检查对象中属性值是否为false的解释。 我有这段代码,试图检查属性'active'是否为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个回答

2
nullundefined0''falseif语句中被视为falsey值。
针对您的问题,我们可以这样处理: data[i].active是一个falsey值吗?
为了提高可读性,您可以创建辅助函数:
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

使用逻辑非运算符:

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

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

0

如果你只想检查false,而不是所有的假值,如null、undefined、0等,则使用===(三个等号)

所以你的代码变成了

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接