This question is pretty much invalid, because jsperf is broken, it skews results for whatever reason. I checked it personally when I was making my own map implementation ( one based on integers ).
There is purely no difference between these two methods.
BTW I think this an easier way to create an empty object with the same syntax:
var EmptyV2 = function() { return Object.create(null); };
I wrote my little own test that prints the time to create whatever amount of these 3 methods.
Here it is:
<!DOCTYPE html>
<html>
<head>
<style>
html
{
background-color: #111111;
color: #2ECC40;
}
</style>
</head>
<body>
<div id="output">
</div>
<script type="text/javascript">
var Empty = function(){};
Empty.prototype = Object.create(null);
var EmptyV2 = function() { return Object.create(null); };
var objectCreate = Object.create;
function createEmpties(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = new Empty();
}
}
function createEmptiesV2(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = new EmptyV2();
}
}
function createNullObjects(iterations)
{
for(var i = 0; i < iterations; i++)
{
var empty = objectCreate(null);
}
}
function addResult(name, start, end, time)
{
var outputBlock = document.getElementsByClassName("output-block");
var length = (!outputBlock ? 0 : outputBlock.length) + 1;
var index = length % 3;
console.log(length);
console.log(index);
var output = document.createElement("div");
output.setAttribute("class", "output-block");
output.setAttribute("id", ["output-block-", index].join(''));
output.innerHTML = ["|", name, "|", " started: ", start, " --- ended: ", end, " --- time: ", time].join('');
document.getElementById("output").appendChild(output);
if(!index)
{
var hr = document.createElement("hr");
document.getElementById("output").appendChild(hr);
}
}
function runTest(test, iterations)
{
var start = new Date().getTime();
test(iterations);
var end = new Date().getTime();
addResult(test.name, start, end, end - start);
}
function runTests(tests, iterations)
{
if(!tests.length)
{
if(!iterations)
{
return;
}
console.log(iterations);
iterations--;
original = [createEmpties, createEmptiesV2, createNullObjects];
var tests = [];
for(var i = 0; i < original.length; i++)
{
tests.push(original[i]);
}
}
runTest(tests[0], 10000000000/8);
tests.shift();
setTimeout(runTests, 100, tests, iterations);
}
runTests([], 10);
</script>
</body>
</html>
I am sorry, it is a bit rigid. Just paste it into an index.html and run.
I think this method of testing is far superior to jsperf.
Here are my results:
|createEmpties| started: 1451996562280 --- ended: 1451996563073 --- time: 793
|createEmptiesV2| started: 1451996563181 --- ended: 1451996564033 --- time: 852
|createNullObjects| started: 1451996564148 --- ended: 1451996564980 --- time: 832
|createEmpties| started: 1451996565085 --- ended: 1451996565926 --- time: 841
|createEmptiesV2| started: 1451996566035 --- ended: 1451996566863 --- time: 828
|createNullObjects| started: 1451996566980 --- ended: 1451996567872 --- time: 892
|createEmpties| started: 1451996567986 --- ended: 1451996568839 --- time: 853
|createEmptiesV2| started: 1451996568953 --- ended: 1451996569786 --- time: 833
|createNullObjects| started: 1451996569890 --- ended: 1451996570713 --- time: 823
|createEmpties| started: 1451996570825 --- ended: 1451996571666 --- time: 841
|createEmptiesV2| started: 1451996571776 --- ended: 1451996572615 --- time: 839
|createNullObjects| started: 1451996572728 --- ended: 1451996573556 --- time: 828
|createEmpties| started: 1451996573665 --- ended: 1451996574533 --- time: 868
|createEmptiesV2| started: 1451996574646 --- ended: 1451996575476 --- time: 830
|createNullObjects| started: 1451996575582 --- ended: 1451996576427 --- time: 845
|createEmpties| started: 1451996576535 --- ended: 1451996577361 --- time: 826
|createEmptiesV2| started: 1451996577470 --- ended: 1451996578317 --- time: 847
|createNullObjects| started: 1451996578422 --- ended: 1451996579256 --- time: 834
|createEmpties| started: 1451996579358 --- ended: 1451996580187 --- time: 829
|createEmptiesV2| started: 1451996580293 --- ended: 1451996581148 --- time: 855
|createNullObjects| started: 1451996581261 --- ended: 1451996582098 --- time: 837
|createEmpties| started: 1451996582213 --- ended: 1451996583071 --- time: 858
|createEmptiesV2| started: 1451996583179 --- ended: 1451996583991 --- time: 812
|createNullObjects| started: 1451996584100 --- ended: 1451996584948 --- time: 848
|createEmpties| started: 1451996585052 --- ended: 1451996585888 --- time: 836
|createEmptiesV2| started: 1451996586003 --- ended: 1451996586839 --- time: 836
|createNullObjects| started: 1451996586954 --- ended: 1451996587785 --- time: 831
|createEmpties| started: 1451996587891 --- ended: 1451996588754 --- time: 863
|createEmptiesV2| started: 1451996588858 --- ended: 1451996589702 --- time: 844
|createNullObjects| started: 1451996589810 --- ended: 1451996590640 --- time: 830