A lightweight but safe dictionary, for when Object won't cut it

  • dict

Downloads in past


1.4.011 years ago12 years agoMinified + gzip package size for dict in KB


An easy but safe string-keyed store =================================== Don't stuff things into objects. Use a dict instead. The problem ----------- You're probably used to stuffing things into objects: ```javascript var hash = {}; hash"foo" = "bar"; console.log("foo" in hash ? hash"foo" : "not there"); // "bar" ``` However this doesn't always work, because your naïve hashes inherit from var hash = {}; console.log("hasOwnProperty" in hash); // true! ``` Even worse, the magic __proto__ property can really ruin your day2: ```javascript var hash = {}; var anotherObject = { foo: "bar" }; hash"proto" = anotherObject; console.log("foo" in hash); // true!! console.log("proto" in hash); // false!!! ``` Usually you're smart enough to avoid silly key names like "hasOwnProperty", "__proto__", and all the rest. But sometimes you want to store user input in your hashes. Uh-oh… dict is the solution ---------------------- Just do an npm install dict and you're good to go: ```javascript var dict = require("dict"); var d = dict(); d.set("foo", "bar"); console.log(d.get("foo", "not there")); // "bar" console.log(d.has("hasOwnProperty")); // false :) var anotherObject = { baz: "qux" }; d.set("proto", anotherObject); console.log(d.has("baz")); // false :) console.log(d.has("proto")); // true :) ``` Featuring ---------
  • get accepts a second argument as a fallback for if the key isn't present (like Mozilla's WeakMap4).
  • Doesn't let you get away with being dumb: if you pass a non-string as a key, you're going to get a TypeError.
  • A full suite of unit tests using mocha5 and chai6: npm test awaits you.
See Also --------
  • rauschma/strmap7 for something a bit more full-featured (albeit exposing its internals everywhere, if you care about that).
  • es6-shim10's Map if you want more than just strings for your keys.