从JSON对象访问javascript中的jum

时间:2015-05-31 16:17:39

标签: javascript json rest enums

我有一个来自我的REST服务的JSON对象。在服务器和前端,我声明了具有相同名称但相互补充的常量。

他们共享一些数据,但大多数每个常量只包含与前端或后端相关的内容。在前端,从后端常量映射前端常量的首选方法是什么?

在后端,BuildingType是一个枚举。在下面的JSON对象中,它是第一个字段buildingType

{buildingType: "CANNON", hp: 100, level: 1, location: Object, name: "Cannon"}

以下是将其映射到常量

的前端版本的javascript代码
    var imageMetadata = eval("clashalytics.Images." + building.buildingType);
    // In this case, the eval is the same as 
    var imageMetadata = clashalytics.Images.CANNON;

我主要是java开发人员,fyi。

2 个答案:

答案 0 :(得分:1)

使用array-like notation

eval("clashalytics.Images." + building.buildingType)

相当于

clashalytics.Images[building.buildingType]

你可以像这样定义一个getter

function getConst(target, path) {
  return target[path];
}

并使用它

getConst(clashalytics.Images, building.buildingtype)
  

不要不必使用eval!

     

eval()是一个危险的函数,它执行它传递的代码   具有来电者的特权。如果使用字符串运行eval()   可能会受到恶意方的影响,您最终可能会运行   具有您的权限的用户计算机上的恶意代码   网页/扩展程序。更重要的是,第三方代码可以看到   调用eval()的范围,可能导致可能的攻击   以类似函数不易受影响的方式。

     

eval()通常也比替代品慢,因为它必须   调用JS解释器,同时优化许多其他构造   通过现代JS引擎。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval

答案 1 :(得分:1)

首先,你永远不应该使用:Eval()。它有security implications并且可能会干扰范围链。 (Eval()可以访问和修改其外部作用域中的变量,而Function cannot)。

其次," Javascript是一种弱类型语言,这意味着您不会事先声明变量具有特定类型"。请从Stijn de Witt

查看此网站enums-in-javascript

作为一种解决方法,您可以使用Object.freeze(),在https://developer.mozilla.orgObject.freeze()

上做了很好的解释

因此,您的代码将如下所示:

var Cannon = Object.freeze({"hp":100, "level":1, "location":Object, "name": "Cannon"})

然后您可以像普通对象一样访问Cannon enumeratorsCannon.hp会给你100等等......

如果您有任何疑问,请告诉我。