Javascript 保留字和对象

Javascript reserved word and object

我正在制作一个单词词典,所以有 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+"_" 那样处理它,但这似乎很糟糕。还有什么我可以做的吗?

constructor 键替换为 undefined

根据 the MDN Object.prototype page,唯一没有被 __fieldname__ 模式隐藏的是 "constructor field"。因此,您可以通过 { 'constructor': undefined }.

初始化您的对象

但是,您必须确保在 for .. in 语句中过滤掉所有以 undefined 为值的键,因为它会将 constructor 作为 "valid" 键(即使在您专门将其设置为未定义之前它不会)。即

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

在 getting/setting

时检查类型

否则,您可以在 'fetch' 或 'store' 时检查类型。即

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

我认为你应该将所有单词和它们的翻译存储在一个数组中。当你需要翻译一个单词时,可以使用数组的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

您可以使用内置的 Map 类型,而不是使用 JS 对象,它使用 strings/symbols 作为键并且不与任何现有属性冲突。

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

要达到预期结果,请使用以下选项使用索引获取任何键值的值

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

为了测试,我给了一个带有键构造函数的对象,另一个没有构造函数的对象。

基本上我先获取键的索引,然后使用索引获取值