在JavaScript中访问对象:在这种情况下,为什么我需要使用方括号语法而不是点语法?
我有一个JavaScript对象,如下所示:在JavaScript中访问对象:在这种情况下,为什么我需要使用方括号语法而不是点语法?,javascript,Javascript,我有一个JavaScript对象,如下所示: var map = { Monday: [ 'something', 'something else', ], }; 在尝试访问它时,我注意到一些奇怪的事情,我不明白: 做console.log(map.Monday)返回未定义的。要恢复数组,我需要执行console.log(map[“Monday”]) 为什么会这样?我已经修改了引号和大小写标识符。到目前为止,我唯一一次遇到这种情况是当标识符中包含
var map = {
Monday: [
'something',
'something else',
],
};
在尝试访问它时,我注意到一些奇怪的事情,我不明白:
做console.log(map.Monday)代码>返回未定义的
。要恢复数组,我需要执行console.log(map[“Monday”])代码>
为什么会这样?我已经修改了引号和大小写标识符。到目前为止,我唯一一次遇到这种情况是当标识符中包含数字时(当然,它仍然是一个字符串)
编辑
根据评论,它正在发挥作用——事实上,这是正确的。那么原因可能与数组标识符来自HTML select元素有关:
$('.select').on('change', function(event) {
var selectedDay = $(event.currentTarget).val();
if (map.hasOwnProperty(selectedDay)) {
console.log(map[selectedDay]);
}
});
那么原因可能与数组标识符来自HTML select元素这一事实有关
是的…语法someObj.property
相当于someObj['property']
,即属性名称作为字符串传递到方括号中
现在,如果希望动态访问某些属性,并且仅将属性名称作为字符串,则需要使用方括号语法。例如:
var day = 'Monday';
console.log(map[day]);
map[day]
相当于map['Monday']
,后者相当于map.Monday
。但是,如果要调用map.day
,您将尝试访问map['day']
,即对象中显然不存在的属性day
我们从这个问题中学到了什么?简化代码以关注问题而不是包含大量不相关的内容是一个好主意。但是当您这样做时,您应该确保问题实际上存在于更简单的代码示例中。因为在本例中,您消除了问题,因为您认为尝试动态访问属性并不重要。在javascript中,对象和数组都可以作为数组和对象访问:
var a = []; //array
a["x"] = 100; //works
a.y = 50; //works
a.z = a.x + a["y"]; //works
var b = {}; //object
b.x = 10; //works
b["y"] = 20; //works
b["z"] = b["x"] + b.y; //works
如果您仍然有问题,它与您发布的代码无关。在chrome中,它正在运行console.log(map.Monday)
返回了[“某物”,“其他某物”]
,在Chrome和Firefox中进行了测试。您似乎在为我工作……在FF中工作,就像posted一样。两种变体。@abhishekkannojia不。从此处复制并在没有更改的情况下工作