2017-08-25 4 views
0

オブジェクトのプロパティ値がfalseであるかどうかをチェックする方法の説明が見つからないようです。私はプロパティ 'アクティブ'が偽であるかどうかを確認しようとするこのコードを持っていますが、typeof data[i].active ==='undefined部分だけが動作します。オブジェクトのプロパティ値がfalseであることを確認します。

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

答えて

1

使用論理的ではない演算子:

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

その一つのオペランドがtrueに変換できない場合はfalseを返します。それ以外の場合はtrueを返します。

0

nullundefined0''falseif文内部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])) {} 
0

を、ヌル、未定義、0などの偽の値のすべてではなく、===(トリプル・イコール)

だからコードが

if(data[i].active === false) { 
    cell.innerHTML+= "<span class='eye'><i class='fa fa- 
    eye-slash'></i></span>";        
} 
なり
関連する問題