如果我有一个如下所示的javascript对象
var columns = {
left: true,
center : false,
right : false
}
,并且我有一个既传递了对象又传递了这样的属性名称的函数
//should return false
var side = read_prop(columns, 'right');
read_prop(object, property)
的主体是什么样?#1 楼
您不需要它的功能-只需使用括号表示法即可:var side = columns['right'];
这与点表示法
var side = columns.right;
相同,除了right
也可能出现,如果需要它的功能,则为:
function read_prop(obj, prop) {
return obj[prop];
}
要回答下面与原始问题没有直接关系的某些注释,可以通过多个括号引用嵌套对象。如果您有这样的嵌套对象:
var foo = { a: 1, b: 2, c: {x: 999, y:998, z: 997}};
,则可以按以下方式访问
x
的属性c
:var cx = foo['c']['x']
如果未定义属性,则尝试引用该属性将返回
undefined
(不是null
或false
):foo['c']['q'] === null
// returns false
foo['c']['q'] === false
// returns false
foo['c']['q'] === undefined
// returns true
#2 楼
ThiefMaster的答案是100%正确的,尽管我遇到了类似的问题,我需要从嵌套对象(对象内的对象)中获取属性,因此,作为他答案的替代方案,您可以创建一个递归解决方案,以允许您定义一个名称来捕获任何属性,而不论深度如何:function fetchFromObject(obj, prop) {
if(typeof obj === 'undefined') {
return false;
}
var _index = prop.indexOf('.')
if(_index > -1) {
return fetchFromObject(obj[prop.substring(0, _index)], prop.substr(_index + 1));
}
return obj[prop];
}
给定属性的字符串引用在哪里装配
property1.property2
代码和JsFiddle中的评论。
评论
如果prop字符串将包含数组索引,则这将不起作用
– SET
15年3月25日在15:50
这样的吗? jsfiddle.net/amofb8xa/8
– Prusprus
15年3月25日在17:52
访问嵌套属性可以简单得多,请查看stackoverflow.com/questions/4244896/…
– Br先生
15年6月22日在8:11
#3 楼
由于上面的答案为我的项目提供了帮助(我问了一个重复的问题,并在此处被提及),因此在嵌套在var中时,我正在提交答案(我的测试代码)以表示括号: <html>
<head>
<script type="text/javascript">
function displayFile(whatOption, whatColor) {
var Test01 = {
rectangle: {
red: "RectangleRedFile",
blue: "RectangleBlueFile"
},
square: {
red: "SquareRedFile",
blue: "SquareBlueFile"
}
};
var filename = Test01[whatOption][whatColor];
alert(filename);
}
</script>
</head>
<body>
<p onclick="displayFile('rectangle', 'red')">[ Rec Red ]</p>
<br/>
<p onclick="displayFile('square', 'blue')">[ Sq Blue ]</p>
<br/>
<p onclick="displayFile('square', 'red')">[ Sq Red ]</p>
</body>
</html>
评论
也许这不言而喻,但是我认为值得明确指出prop必须是string类型,或者解析为string类型。
–prasanthv
15年6月24日在0:51
恕我直言,这很明显...
– ThiefMaster
15年6月24日在21:33
嵌套对象又如何呢?
–sarkiroka
16-11-25在7:21
如果该属性不存在会怎样?它返回未定义的吗?
–蓝光
18-2-28在10:31
@BluE:会更容易测试吗? ;)是,访问未定义的属性将返回未定义。
– ThiefMaster
18年2月28日在14:51