作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从 scriptDB 收到对象后,我无法访问它的某些字段。该字段带有数字键。如果取消注释该行
// var item2 = obj2['test']['2']['f']
这会导致运行时错误。
完整代码为:
function test() {
var obj1 =
{
type: 'object',
name: 'test',
test:
{
F: 'foo',
B: {f: 'foooo', b: 'baaar', },
1: 'foo',
2: {f: 'foooo', b: 'baaar', },
},
};
var db = ScriptDb.getMyDb();
var id = db.save(obj1).getId();
var obj2 = db.load(id);
db.removeById(id);
var item1 = obj1['test']['2']['f']; // item1 = "foooo"
// var item2 = obj2['test']['2']['f']; // Runtime error!
var item3 = obj2['test']; // item3 = ({'2':{f:"foooo", b:"baaar"}, F:"foo", '1':"foo", B:{f:"foooo", b:"baaar"}})
var item4 = obj2['test']['2']; // item4 = undefined!!! Why?!!!
var item5 = obj1['test']['2']; // item5 = ({f:"foooo", b:"baaar"})
var item6 = obj2['test']['B']; // item6 = ({f:"foooo", b:"baaar"})
var item7 = obj2['test']['B']['f']; // item7 = "foooo"
return
}
如您所见,不可能获取对象:
var item4 = obj2['test']['2']; // item4 = undefined
同时:
var item5 = obj1['test']['2'];
从原始 obj1 返回正确的对象,并且
var item6 = obj2['test']['B'];
从 obj2 返回一个类似的对象。有什么问题吗?
附注obj1 和 obj2 之间的唯一区别(将它们保存到 scriptDB 之前和之后) - obj2 中的数字键中存在引号。
最佳答案
你应该加注星标issue 3390 (齐格·曼德尔发表)。
现在谈谈您的问题的解决方案。最好的办法是避免使用数字键,但如果您不能这样做,那么一个简单的解决方法是字符串化并重新解析 ScriptDb
返回的对象。
var obj2 = JSON.parse(db.load(id).toJson());
这样做的缺点是您无法不修改 obj2
,然后将更新保存回 ScriptDb
。如果您不在其他地方使用对象 ID,则可以随时删除原始对象并将“更改”保存为新对象。
关于javascript - 谷歌应用脚本: Cannot get data from object loaded from ScriptDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953228/
我是一名优秀的程序员,十分优秀!