使用String或Date作为记忆的对象键.

evf*_*qcg 3 javascript performance

我有一个日期数组,我需要不止一次为这些日期执行一些计算.所以我决定使用memoization来缓存结果.

但是,我不确定是否可以将Date对象用作关键字.我希望比较日期可能比比较字符串慢,所以使用日期的字符串表示作为键可能是有意义的.

所以我的问题是,最好用作密钥,字符串或日期来访问JavaScript对象中的值.

ZER*_*ER0 8

我认为您可以使用getTime方法来比较Date对象的数字版本.应该更快,加上更可靠的IMVHO跨浏览器和SO的字符串表示,以及它们的语言环境,并且更容易被操纵.

如果您不使用MapWeakMap而只使用普通对象,请注意,将Date对象作为对象的键传递将自动获取它的字符串版本(toString将被调用):

var now = {}; 
now[new Date()] = true;


console.log(Object.keys(now)); // ["Sun Apr 07 2013 13:21:17 GMT+0200 (CEST)"]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,即使您使用数字键,它们仍将作为字符串进行比较。对象键始终且仅是字符串。 (3认同)
  • 我不确定 OP 是使用普通对象还是“Map”/“WeakMap”——它没有被指定。在普通对象的情况下,当然,键总是字符串。但是使用 `getTime` 转换比 `Date` 的字符串表示更快,以防被操作或取回 `Date` 对象。 (2认同)