[英]How it comes that my json formatted OBJ doesn't have a length
I am just trying to create an Object containg several Controls from After Effects ScriptUI API.我只是想从 After Effects ScriptUI API 创建一个包含多个控件的对象。
This is what my obj looks like:这是我的 obj 的样子:
var easeyPeasy = {};
// groups
easeyPeasy.groups = {
"easeIn_grp": ease__Panel.add('group', undefined, {
name: 'easeIn group'
}),
"easyEase_grp": ease__Panel.add('group', undefined, {
name: 'easyEase group'
}),
"easeOut_grp": ease__Panel.add('group', undefined, {
name: 'easeOut group'
})
};
// labels
easeyPeasy.label = {
"easeIn_label": easeyPeasy.groups["easeIn_grp"].add('statictext', undefined, 'ease in:', {
name: 'easeIn_label'
}),
"easyEase_label": easeyPeasy.groups["easyEase_grp"].add('statictext', undefined, 'easy ease: ', {
name: 'easyEase_label'
}),
"easeOut_label": easeyPeasy.groups["easeOut_grp"].add('statictext', undefined, 'ease out:', {
name: 'easeOut_label'
})
};
// slider
easeyPeasy.slider = {
"easeIn_slider": easeyPeasy.groups["easeIn_grp"].add('slider', undefined, 50, 0, 100, {
name: 'easeIn_slider'
}),
"easyEase_slider": easeyPeasy.groups["easyEase_grp"].add('slider', undefined, 50, 0, 100, {
name: 'easyEase_slider'
}),
"easeOut_slider": easeyPeasy.groups["easeOut_grp"].add('slider', undefined, 50, 0, 100, {
name: 'easeOut_slider'
})
}
// inputs
easeyPeasy.inputs = {
"easeIn_input": easeyPeasy.groups["easeIn_grp"].add('edittext', undefined, 50, {
name: 'easeIn_input'
}),
"easyEase_input": easeyPeasy.groups["easyEase_grp"].add('edittext', undefined, 50, {
name: 'easyEase_input'
}),
"easeOut_input": easeyPeasy.groups["easeOut_grp"].add('edittext', undefined, 50, {
name: 'easeOut_input'
})
}
if I know try to return the length
of my easeyPeasy.inputs
for example I only get undefined
如果我知道尝试返回我的
easeyPeasy.inputs
的length
,例如我只会得到undefined
alert(easeyPeasy.inputs.length)
Besides that I can't select values in my obj via key index.除此之外,我无法通过键索引选择 obj 中的值。 It only works via key string.
它只能通过密钥字符串工作。
working:在职的:
alert(easeyPeasy.inputs["easeIn_input"])
not working:不工作:
alert(easeyPeasy.inputs[0])
Does anyone know what I am missing here?有谁知道我在这里想念什么? Thanks in advance
提前致谢
You seem to be expecting JavaScript objects to behave like PHP arrays.您似乎希望 JavaScript 对象的行为类似于 PHP 数组。 They don't.
他们没有。
Arrays have properties whose names are numbers and a length property which is equal to the name of the highest numerical property plus one.数组具有名称为数字的属性和一个长度属性,该属性等于最高数字属性的名称加一。
Objects just have named properties.对象只有命名属性。
You can generate an array of property names in an object with Object.keys()
.您可以使用
Object.keys()
在对象中生成一组属性名称。
var data = { foo: "foo_val", bar: "bar_val" }; var props = Object.keys(data); for (var i = 0; i < props.length; i++) { document.body.appendChild( document.createTextNode( data[props[i]] ) ) document.body.appendChild( document.createElement("br") ); }
You have created a Javascript object;您已经创建了一个 Javascript 对象; it just stores values accessible via keys.
它只存储可通过键访问的值。
To determine the length in characters, you need to convert it to a string representation first:要确定以字符为单位的长度,您需要先将其转换为字符串表示形式:
var json = JSON.stringify(easeyPeasy)
If you want to loop over properties of an object, you can also use for-in
如果要遍历对象的属性,也可以使用
for-in
var obj = { test1:"test1", var1:10, var2:20, var3:30 } for (var key in obj){ document.write(key + " : " + obj[key] + "<br/>"); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.