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

时间:2015-12-09 15:47:12

标签: javascript hashmap

在JavaScript中,通常将对象用作哈希:

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

甚至可以使用带空格的键:

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

但是有一些限制:不能将密钥称为

  • __proto__
  • constructor
  • hasOwnProperty
  • isPrototypeOf
  • propertyIsEnumerable
  • toLocalString
  • toString
  • valueOf
  • __defineGetter__
  • __defineSetter__
  • __lookupGetter__
  • __lookupSetter__

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

绕过这种限制的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用Object.create并将父级设为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