在JavaScript中访问对象:在这种情况下,为什么我需要使用方括号语法而不是点语法?

在JavaScript中访问对象:在这种情况下,为什么我需要使用方括号语法而不是点语法?,javascript,Javascript,我有一个JavaScript对象,如下所示: var map = { Monday: [ 'something', 'something else', ], }; 在尝试访问它时,我注意到一些奇怪的事情,我不明白: 做console.log(map.Monday)返回未定义的。要恢复数组,我需要执行console.log(map[“Monday”]) 为什么会这样?我已经修改了引号和大小写标识符。到目前为止,我唯一一次遇到这种情况是当标识符中包含

我有一个JavaScript对象,如下所示:

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不。从此处复制并在没有更改的情况下工作