Javascript映射变量 我想在JavaScript中实现C++映射变量类型,但是在互联网上看不到任何东西。当我使用SFML时,我创建了一个String和SFML::Texture类型的std::map,这样我就可以在map中存储一个纹理,并通过使用键获得纹理值,我将如何在JavaScript中实现这一点

Javascript映射变量 我想在JavaScript中实现C++映射变量类型,但是在互联网上看不到任何东西。当我使用SFML时,我创建了一个String和SFML::Texture类型的std::map,这样我就可以在map中存储一个纹理,并通过使用键获得纹理值,我将如何在JavaScript中实现这一点,javascript,c++,Javascript,C++,我之所以要这样做,是因为我想在HTML5游戏开始时加载所有图像资源,然后我可以调用图像映射并使用键获取图像引用。JavaScript中的标准方式只是一个对象: var map = {}; map["any key you like"] = any_value_you_like; // Also: map.any_name_you_like_that_fits_identifer_name_rules = any_value_you_like; 键总是字符串(目前,ES6将添加符号/名称键),

我之所以要这样做,是因为我想在HTML5游戏开始时加载所有图像资源,然后我可以调用图像映射并使用键获取图像引用。

JavaScript中的标准方式只是一个对象:

var map = {};
map["any key you like"] = any_value_you_like;

// Also:
map.any_name_you_like_that_fits_identifer_name_rules = any_value_you_like;
键总是字符串(目前,ES6将添加符号/名称键),值是任何JavaScript值。当您使用点表示法(
obj.foo
)时,属性名是一个文本(并且受JavaScript的IdentifierName规则的约束);使用括号表示法和字符串(
obj[“foo”]
)时,属性名称可以是任何内容(也可以是任何表达式的结果,例如变量查找)

例如:

输出:

map['a'] = alpha map['b'] = beta map['c'] = gamma
这样,如果您碰巧有可能使用名为
toString
valueOf
(位于
Object.prototype
)的键,则在未明确设置它们的对象上查找它们时不会出现误报。

您现在可以使用
映射
数据结构。它是通过ES6在JavaScript中引入的,允许创建键值对集合。与对象不同,贴图对象可以同时包含对象和基本体作为关键帧和值。下面是一个例子:

const items=newmap();
//添加项目

设置((您可能会考虑使用)对象.Cube(NULL)”而不是“{}”,因为结果不会预先填充像ToStRef()、HasObjFrutyType()这样的属性。,proto,constructor,等等。@dandavis:因为这些是不可枚举的,你可以用自己的属性对它们进行阴影处理,所以没有什么需要。但是,是的,这是一个选项,也是一个有趣的选项。@T.J.Crowder:嗯,Object.create(null)的最大优势它允许在抓取时更快地访问应用程序中的任何地方的属性,因为您只需抓取地图[任何内容],而不必担心调用hasOwnProperty.call(地图,任何内容)或者是把东西放出来,你没有把它放进去。这使它更像是一个C++地图。好的更新TJ.DANAVIIS:我通常不去麻烦<代码> HasObjys< /Cord>(通常是前缀属性名称),但是正如我所说,非常有趣的选项(不仅仅是因为它不需要前缀)。@dandavis:这些阅读很有趣:使用
Object.create
{}
相比,但谁在乎呢,你并不经常这样做;但是(正如我们所说)有可能出现误报;。总体而言,
Object.create(null)
看起来不错。 map['a'] = alpha map['b'] = beta map['c'] = gamma
var map = Object.create(null);
map["any key you like"] = any_value_you_like;

// Also:
map.any_name_you_like_that_fits_identifer_name_rules = any_value_you_like;