JavaScript string to number conversion table

by dshilkret

CSS

body {
    padding: 30px;
}
table {
    border-collapse: collapse;
}

td {
    border: 1px solid #e0e0e0;
    padding: 5px;
    font: 12px Consolas,monospace;
}

td:not(:first-child) {
    text-align: right;
}

thead td {
    background: #3663AE;
    color: white;
    font-weight: 800;
}

b {
    color: red;
    font-weight: normal;
}

.o1 {
    background: #fafafa;
}

JavaScript

table = function(tab) {
    return "<table>" 
        + "<thead>" + tr(tab.shift()) + "</thead>" 
        + "<tbody>" + tab.map(tr).join("") + "</tbody>"
        + "</table>";
}

var o = 0;

tr = function(row) {
    o = 1 - o;
    return "<tr class='o" + o + "'>" + row.map(function(s) {
        return "<td>" + s + "</td>";
    }).join("") + "</tr>";
};

str = function(n) {
    if(isNaN(n))
        return '<b>' + String(n) + '</b>';
    return String(n);
}

xs = [
    "'123'", 
    "'+123'", 
    "'-123'", 
    "'123.45'", 
    "'-123.45'", 
    "'12e5'", 
    "'012'", 
    "'0xBABE'", 
	"'0xFFFFFFFF'", 
    "'123456789012345678'",
    
    "''", 
    "'123foo'", 
    "'123.45foo'", 
    "'  123   '", 
    "'foo'", 
	
    "null", 
    "window.undef", 
    "true", 
    "false", 
	
    "{}", 
	"{valueOf: function(){return 125}}",
    
    "'+0'",
    "'-0'",
    "'Infinity'",
    "'+Infinity'",
    "'-Infinity'",
    'NaN'
]

tab = [[
	"x",
	"parseInt(x)",
	"parseFloat(x)",
	"Number(x)",
	"+x",
	"~~x",
	"x>>>0"
]].concat(xs.map(function(x) {
    var y = eval("(" + x + ")");
    y = "1647454548";
    return [
	    x,
	    str(parseInt(y)),
	    str(parseFloat(y)),
	    str(Number(y)),
	    str(+y),
	    str(~~y),
	    str(y>>>0)
	]
}));

document.body.innerHTML = table(tab)