Javascript 使用变量作为对象引用
尝试将变量指定为对象引用名称时遇到一些问题Javascript 使用变量作为对象引用,javascript,object,reference,Javascript,Object,Reference,尝试将变量指定为对象引用名称时遇到一些问题 var roomName = 'room_' + $(this).data("room-id"); console.log("roomName: " + roomName); beds_required_obj.roomName.single_beds_required = parseInt($(this).val()); My console.log报告如下:“roomName:room_1” 但我一直收到一个错误:“Type
var roomName = 'room_' + $(this).data("room-id");
console.log("roomName: " + roomName);
beds_required_obj.roomName.single_beds_required = parseInt($(this).val());
My console.log报告如下:“roomName:room_1”
但我一直收到一个错误:“TypeError:beds\u required\u obj.roomName未定义”
将变量指定为数组时,我可以使用该变量:
single_beds_required['room ' + $(this).data("room-id")] = parseInt($(this).val());
但在这种情况下,我的对象很混乱,需要额外的处理才能将其拖入整洁的格式服务器端
如何使用变量(在函数中)在全局对象中创建新的obj子组?通常,控制台中收到的错误不存在。让我们把你的对象分解一下,看看是什么可能导致这个错误
var beds_required_obj = {};
var roomName = 'room_' + $(this).data("room-id");
console.log("roomName: " + roomName);
if(!beds_required_obj[roomName]) beds_required_obj[roomName] = {};
beds_required_obj[roomName].single_beds_required = parseInt($(this).val());
var roomName = 'room_' + $(this).data('room-id');
beds_required_obj.roomName.single_beds_required = ...
现在,上面的代码首先假设beds\u required\u obj
是一个存在的对象。从评论中我们可以看出,正如您所使用的,这确实是正确的:
var beds_required_obj = {};
现在,因为这个对象存在,您可以调用beds\u required\u obj。这里的任何东西
,它都将是有效的代码。但是,您尝试访问的子级可能不存在
接下来,您已经编写了beds\u required\u obj.roomName
。现在,它正在尝试访问名为“roomName”而不是“room_id”的子对象。要访问存储在roomName
变量中的动态名称,需要使用方括号。因此:
beds_required_obj[roomName]
这将返回动态创建的房间名称的子对象
现在,根据roomName
的实际情况(例如,它可能是“room_123”),这个子对象也可能不存在。如果它不存在,则任何访问此对象的子对象的尝试都将返回错误。例如,请查看下面的代码:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// this line below will throw an error because the room_1234 child object does not exist
beds_required_obj[roomName].single_beds_required = 2;
发生的情况是,您正试图以未定义对象的子对象的身份访问所需的single\u beds\u
。要实现此功能,您需要更改上面的代码以包含一行额外的代码:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// now create the room child object
beds_required_obj[roomName] = {};
// now this line will work, as the room is a valid object that can have children assigned to it.
beds_required_obj[roomName].single_beds_required = 2;
注意:如果您希望使用更具可读性的代码(imo)执行类似操作,那么我将使用:
breds_required_obj[roomName] = {
single_beds_required: 2
};
通常,您在控制台中收到的错误并不存在。让我们把你的对象分解一下,看看是什么可能导致这个错误
var roomName = 'room_' + $(this).data('room-id');
beds_required_obj.roomName.single_beds_required = ...
现在,上面的代码首先假设beds\u required\u obj
是一个存在的对象。从评论中我们可以看出,正如您所使用的,这确实是正确的:
var beds_required_obj = {};
现在,因为这个对象存在,您可以调用beds\u required\u obj。这里的任何东西
,它都将是有效的代码。但是,您尝试访问的子级可能不存在
接下来,您已经编写了beds\u required\u obj.roomName
。现在,它正在尝试访问名为“roomName”而不是“room_id”的子对象。要访问存储在roomName
变量中的动态名称,需要使用方括号。因此:
beds_required_obj[roomName]
这将返回动态创建的房间名称的子对象
现在,根据roomName
的实际情况(例如,它可能是“room_123”),这个子对象也可能不存在。如果它不存在,则任何访问此对象的子对象的尝试都将返回错误。例如,请查看下面的代码:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// this line below will throw an error because the room_1234 child object does not exist
beds_required_obj[roomName].single_beds_required = 2;
发生的情况是,您正试图以未定义对象的子对象的身份访问所需的single\u beds\u
。要实现此功能,您需要更改上面的代码以包含一行额外的代码:
var beds_required_obj = []; // create an empty object
var roomName = 'room_1234'; // the name of our room
// now create the room child object
beds_required_obj[roomName] = {};
// now this line will work, as the room is a valid object that can have children assigned to it.
beds_required_obj[roomName].single_beds_required = 2;
注意:如果您希望使用更具可读性的代码(imo)执行类似操作,那么我将使用:
breds_required_obj[roomName] = {
single_beds_required: 2
};
你差点就成功了。使用
beds\u required\u obj[roomName]。单人床\u required=…
@Matt Wey。。。。是的,我试过了。返回此错误:TypeError:beds_required_obj[roomName]未定义首先使用'beds_required_obj={};'初始化对象@加法器-var beds_required_obj={};已在全局范围内的函数之前声明。您几乎拥有了它。使用beds\u required\u obj[roomName]。单人床\u required=…
@Matt Wey。。。。是的,我试过了。返回此错误:TypeError:beds_required_obj[roomName]未定义首先使用'beds_required_obj={};'初始化对象@加法器-var beds_required_obj={};已在全局范围中的函数之前声明。