JSFiddle - React, Tailwind, and code Playground

by Justineo

HTML

<table>
  <tr>
    <td>
      null
    </td>
  </tr>
  <tr>
    <td>
      undefined
    </td>
  </tr>
  <tr>
    <td>
      true
    </td>
  </tr>  <tr>
    <td>
      false
    </td>
  </tr>
  <tr>
    <td>
      []
    </td>
  </tr>
  <tr>
    <td>
      [1,2,3]
    </td>
  </tr>
  <tr>
    <td>
      {}
    </td>
  </tr>
  <tr>
    <td>
      {'id':1}
    </td>
  </tr>
  <tr>
    <td>
      0
    </td>
  </tr>
  <tr>
    <td>
      1
    </td>
  </tr>
  <tr>
    <td>
      NaN
    </td>
  </tr>
  <tr>
    <td>
      Infinity
    </td>
  </tr>
  <tr>
    <td>
      ''
    </td>
  </tr>
  <tr>
    <td>
      '    '
    </td>
  </tr>
  <tr>
    <td>
      'hello'
    </td>
  </tr>
  <tr>
    <td>
      new String('')
    </td>
  </tr>
  <tr>
    <td>
      new String('hello')
    </td>
  </tr>
  <tr>
    <td>
      /hello/
    </td>
  </tr>
  <tr>
    <td>
      new Date()
    </td>
  </tr>
  <tr>
    <td>
      function() {}
    </td>
  </tr>
  <tr>
    <td>
      document.body
    </td>
  </tr>
  <tr>
    <td>
      alert
    </td>
  </tr>
  <tr>
    <td>
      window
    </td>
  </tr>
</table>

CSS

body {
    font-size:11px;
    font-family:Verdana;
    line-height:20px;
}

table {
    border-collapse:collapse;
}

td, th {
    border:1px solid #666;
    padding:0 10px;
}

th {
    background-color:#ccc;
    font-weight:700;
}

.true {
    background-color:#CCFFCC;
}

.false {
    background-color:#FFCCCC;
}

JavaScript

var instances = [null, undefined, true, false, [], [1, 2, 3], {}, {'id': 1}, 0, 1, NaN, Infinity, '', '    ', 'hello', new String(''), new String('hello'), /hello/, new Date(), function() {}, document.body, alert, window];

var isEmptyValue = function(value) {
    var type;
    if(value == null) { // 等同于 value === undefined || value === null
        return true;
    }
    type = Object.prototype.toString.call(value).slice(8, -1);
    switch(type) {
        case 'String':
            return !$.trim(value);
        case 'Array':
            return !value.length;
        case 'Object':
            return $.isEmptyObject(value); // 普通对象使用 for...in 判断,有 key 即为 false
        default:
            return false; // 其他对象均视作非空
    }
};

for (var i = 0, j = instances.length; i < j; i++) {
  var s = Object.prototype.toString.call(instances[i]),
      row = $('tr').eq(i),
      item = instances[i],
      isEmptyVal = isEmptyValue(item);
  $('<td>' + s + '</td>').appendTo(row);
  $('<td>' + typeof item + '</td>').appendTo(row);
  $('<td>' + isEmptyVal + '</td>').appendTo(row).addClass(isEmptyVal.toString());
}


$('table').prepend('<tr><th>value</th><th>Object.prototype.toString</th><th>typeof</th><th>isEmptyValue</th></tr>');