Skip to content

Instantly share code, notes, and snippets.

@nalply
Created August 12, 2010 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nalply/520677 to your computer and use it in GitHub Desktop.
Save nalply/520677 to your computer and use it in GitHub Desktop.
// Benchmark typeof object.key === 'undefined' to 'key' in object
var sys = require("sys")
function randomKey(n) {
var letters = "abcdefghijklmnopqrstuvwxyz"
var key = ""
for (var i = 0; i < n; i++) key += letters[Math.floor(Math.random() * 26)]
return key
}
function addKeys(m, n, object) {
if (typeof object === 'undefined') object = {}
for (var i = 0; i < m; i++) object[randomKey(n)] = randomKey(n)
return object
}
// The dummy variable is here to make sure that the loop does not get
// optimized away.
var benchmarkInOperator = {
existing: function (rounds, object) {
var dummy = 0;
for (var i = 0; i < rounds; i++) {
for (var key in object) if (key in object) dummy++;
}
return dummy
}
, nonExisting: function (rounds, object) {
var dummy = 0;
for (var i = 0; i < rounds; i++) {
for (var key in object) if ('x' in object) dummy++;
}
return dummy
}
}
var benchmarkTypeofUndefined = {
existing: function (rounds, object) {
var dummy = 0;
for (var i = 0; i < rounds; i++) {
for (var key in object) if (typeof object[key] === 'undefined') dummy++;
}
return dummy
}
, nonExisting: function (rounds, object) {
var dummy = 0;
for (var i = 0; i < rounds; i++) {
for (var key in object) if (typeof object['x'] === 'undefined') dummy++;
}
return dummy
}
}
var t0, t1
var object = addKeys(10000, 80)
t0 = new Date().getTime()
benchmarkInOperator.existing(1000, object)
t1 = new Date().getTime()
sys.puts("existing in operator: " + (t1 - t0))
t0 = new Date().getTime()
benchmarkTypeofUndefined.existing(1000, object)
t1 = new Date().getTime()
sys.puts("existing typeof undefined: " + (t1 -t0))
t0 = new Date().getTime()
benchmarkInOperator.nonExisting(1000, object)
t1 = new Date().getTime()
sys.puts("non existing in operator: " + (t1 - t0))
t0 = new Date().getTime()
benchmarkTypeofUndefined.nonExisting(1000, object)
t1 = new Date().getTime()
sys.puts("non existing typeof undefined: " + (t1 -t0))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment