Created
August 26, 2016 08:04
-
-
Save RubaXa/1aebf699d73fb743127903c0b0a8bece to your computer and use it in GitHub Desktop.
(key in object) vs. (object[key] !== void 0) vs. object.hasOwnProperty(key) (http://jsbench.github.io/#1aebf699d73fb743127903c0b0a8bece) #jsbench #jsperf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"/> | |
<title>(key in object) vs. (object[key] !== void 0) vs. object.hasOwnProperty(key)</title> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script> | |
<script src="./suite.js"></script> | |
</head> | |
<body> | |
<h1>Open the console to view the results</h1> | |
<h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2> | |
</body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
(function (factory) { | |
if (typeof Benchmark !== "undefined") { | |
factory(Benchmark); | |
} else { | |
factory(require("benchmark")); | |
} | |
})(function (Benchmark) { | |
var suite = new Benchmark.Suite; | |
Benchmark.prototype.setup = function () { | |
var object = {}; | |
for (var i = 0; i < 5; i++) { | |
object[i + '_' + Math.random()] = Math.random(); | |
} | |
}; | |
suite.add("in", function () { | |
/** in **/ | |
var results = []; | |
for (var i = 0; i < 10; i++) { | |
var key = '_' + Math.random() + i; | |
(key in object) && results.push(key); | |
} | |
if (results.length) throw 'wtf?'; | |
}); | |
suite.add("void 0", function () { | |
/** void 0 **/ | |
var results = []; | |
for (var i = 0; i < 10; i++) { | |
var key = '_' + Math.random() + i; | |
(object[key] !== void 0) && results.push(key); | |
} | |
if (results.length) throw 'wtf?'; | |
}); | |
suite.add("hasOwnProperty", function () { | |
/** hasOwnProperty **/ | |
var results = []; | |
for (var i = 0; i < 10; i++) { | |
var key = '_' + Math.random() + i; | |
object.hasOwnProperty(key) && results.push(key); | |
} | |
if (results.length) throw 'wtf?'; | |
}); | |
suite.on("cycle", function (evt) { | |
console.log(" - " + evt.target); | |
}); | |
suite.on("complete", function (evt) { | |
console.log(new Array(30).join("-")); | |
var results = evt.currentTarget.sort(function (a, b) { | |
return b.hz - a.hz; | |
}); | |
results.forEach(function (item) { | |
console.log((idx + 1) + ". " + item); | |
}); | |
}); | |
console.log("(key in object) vs. (object[key] !== void 0) vs. object.hasOwnProperty(key)"); | |
console.log(new Array(30).join("-")); | |
suite.run(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment