Javascript保留字和对象

时间:2017-10-30 02:17:06

标签: javascript javascript-objects reserved-words

我正在制作单词词典,因此有1,000,000多个单词。 当我需要存储单词constructor时,就会出现问题。我知道这是javascript中的保留字,但我需要将它添加到字典中。

var dictionary = {} 
console.log(dictionary ['word_1']) 
//undefined, this is good
console.log(dictionary ['word_2']) 
//undefined, this is good
console.log(dictionary ['constructor']) 
//[Function: Object] 
// this cause initialization code to break

我该如何解决这个问题?我可以像key=key+"_"一样捣乱,但这看起来很糟糕。还有什么我可以做的吗?

4 个答案:

答案 0 :(得分:4)

您可以使用内置的Map类型而不是使用JS对象,该类型使用字符串/符号作为键,并且不会与任何现有属性冲突。

替换 var dictionary = {}var dictionary = new Map()

。{

答案 1 :(得分:0)

constructor键覆盖为undefined

根据the MDN Object.prototype page__fieldname__架构未隐藏的唯一内容是"构造函数字段"。因此,您只需通过{ 'constructor': undefined }初始化对象。

但是,您必须确保在for .. in语句中过滤掉所有以undefined为其值的键,因为它会将constructor作为&#34获取;有效"键(即使它没有特别设置为未定义之前)。即。

for(var key in obj) if(obj[key] !== undefined) { /* do things */ }

获取/设置

时检查类型

否则,您只需在“提取”时检查类型。或者'存储'它。即。

function get(obj, key) {
  if(typeof obj[key] !== 'function') // optionally, `&& typeof obj[key] !== 'object')`
    return obj[key];
  else
    return undefined;
}

答案 2 :(得分:0)

我认为你应该将所有单词和它们的翻译存储在一个数组中。当您需要翻译单词时,可以使用数组的find方法。

例如:

var dict = [
    { word: "abc", translated: "xyz" },
    ...
];

然后:

var searching_word = "abc";
var translation = dict.find(function (item) {
    return item.word == searching_word;
});
console.log(translation.translated);
// --> xyz

答案 3 :(得分:0)

要获得预期结果,请使用以下选项使用index获取任何键值的值

var dictionary = {};

var dictionary1 = {
  constructor: "test"
};

//simple function to get key value using index
function getVal(obj, val) {
  var keys = Object.keys(obj);
  var index = keys.indexOf(val);//get index of key, in our case -contructor
  return obj[keys[index]]; // return value using indec of that key
}

console.log(getVal(dictionary, "constructor"));//undefined as expected
console.log(getVal(dictionary1, "constructor"));//test

console.log(dictionary["word_1"]);
//undefined, this is good
console.log(dictionary["word_2"]);
//undefined, this is good

codepen - https://codepen.io/nagasai/pen/LOEGxM

为了测试,我给了一个带有key-constructor的对象和没有构造函数的其他对象。

基本上我首先获得键的索引并使用索引

获取值