[英]Why does Google Closure Compiler rename object's properties names?
我从JSON.parse
获得了一个对象obj
:
var obj = JSON.parse(some_data);
并且假设obj
具有属性x
:
console.log('Z', obj, obj.x);
控制台输出:
Z Object {x: "m", n: Array[256], t: Array[256], v: Array[256]} undefined
如您所见, obj.x
存在。 但是console.log
的第三个参数无法打印它,因为Google Closure Compiler生成了以下代码:
console.log("Z ",a,a.G);
x
属性重命名为G
处理这个问题的最佳方法是什么? 第一个想法是否使用obj["x"]
。
谷歌闭包编译器为了来自JSON.parse
的对象将x
重命名为G
的设计背后也是有趣的,考虑到JSON不可用于编译器并且x
可能存在于那里?
(不是真正的答案,但这不符合评论)。
您需要显示一个示例或更多代码。 正如Chad Killingsworth所说,如果你将一些类型转换或其他信息应用于编译器关于你的结果,那么Closure Compiler将进行重命名。
这是一个类似于你所展示的示例代码,但它没有进行重命名。
var orig_obj = { x: "m",
n: new Array(256),
t: new Array(256),
v: new Array(256)};
var some_data = JSON.stringify(orig_obj);
var obj = JSON.parse(some_data);
console.log('Z', obj, obj.x);
使用在线Closure Compiler进行编译 (请注意,您需要选择“高级”选项)会导致:
a=JSON.stringify({x:"m",n:Array(256),t:Array(256),a:Array(256)}),
b=JSON.parse(a);console.log("Z",b,b.x);
运行该代码会导致按预期打印“m”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.