如何在没有任何名称空间冲突的情况下获得Javascript中的哈希表或记录类型



在JavaScript中,通常使用对象作为散列:

hash = {};
hash.key = 'value';

甚至可以使用带空格的密钥:

hash['a key'] = 'a value';

但是有几个限制:密钥不能称为

  • CCD_ 1
  • CCD_ 2
  • CCD_ 3
  • CCD_ 4
  • CCD_ 5
  • CCD_ 6
  • CCD_ 7
  • CCD_ 8
  • CCD_ 9
  • CCD_ 10
  • CCD_ 11
  • CCD_ 12

因为这将导致与JavaScript对象内部的名称空间冲突。

规避这一限制的最佳方法是什么?

您可以使用__proto__3并将父级设置为null,例如

var data = {};
console.log( 
  data.toString
); // in parent prototype there is toString method. returns function 
var hash = Object.create(null);
console.log( 
  hash.toString,
  hash.valueOf,
  hash.__defineGetter__
); // will be undefined because we set parent as null

最新更新