了解发生了什么 obj 和两个 brack 值等于 {some object data}
Understanding what is going on obj and two brack values equaling {some object data}
有时,最有可能对所有人来说最基本的东西并没有被吸收。我遇到了一些我需要理解的 javascript 代码。我添加了一个调试器,这样我就可以逐步完成并希望更好地理解它,但仍然不清楚发生了什么。
var obj = {};
var myID = 999;
var productID = 1;
var myModelID = 100;
var myCatID = 200;
var addMe = 1;
if (typeof obj[myCatID] == 'undefined') {
obj[myCatID] = {};
}
var locationObj = {
state: 'roch',
city: '3',
street: '2nd',
houseNum: '101'
};
var qty = 1;
obj[myCatID][myModelID]={
'location': locationObj,
'quantity': qty,
'prodID': productID,
'id': myID
};
这是怎么回事? obj[myCatID][myModelID] = .关于 obj 的括号表示法中的两个属性的东西?然后给它分配一个对象?只是不清楚我在看什么。
通过我的警报和调试器输出。
!https://imgur.com/gEqonS7
最后,如果我添加一个额外的括号值将 obj[myCatID][myModelID] 更改为 obj[myCatID][myModelID][addMe] 会怎么样?为什么我会收到调试错误,未捕获的类型错误:运行 时无法设置未定义的 属性 '1'?我看不出 [myModelID] 有何不同以及它的声明方式。感谢您帮助我克服这个障碍。
您可以使用括号访问器访问和操作 JavaScript 对象。
var obj = {}; // create an empty object
obj['test'] = 'Hello World'; // add an object property 'test' with content 'Hello World'
console.info(object['test']); // Hello World
console.info(object.test); // Hello World
如您所见,对象 属性 访问可以表示为 obj['propertyName']
或 obj.propertyName
。如果要向对象添加新的 属性,同样适用:obj['newProperty'] = 42
与 obj.newProperty = 42
相同。
现在,如果你想在外部对象中嵌套内部对象,你可以使用多个括号访问器或点来实现:obj['prop1']['prop2']['prop3'] = 42
或 obj.prop1.prop2.prop3 = 42
.
但是:您必须先初始化每个内部对象,然后才能访问它!否则 JavaScript 会说 "Cannot set property of undefined" 因为您尝试访问的实际对象之前从未初始化过。
var obj = {};
obj['prop1'] = {}; // creates an inner object 'prop1'
obj['prop1']['prop2']['prop3'] = 42; // does not work because 'prop2' has never been created as an inner object
在您的示例中,您无法访问 obj[myCatID][myModelID][addMe]
,因为内部对象 "myModelID" 从未被初始化为对象。因此,访问 obj[myCatID][myModelID]
将 return undefined
,因此您将尝试调用 undefined['prop3']
,这会导致错误。
简单的解决方案:检查每个内部对象是否已经初始化。这就是您在 if (typeof obj[myCatID] == 'undefined')
.
处的代码中发生的情况
有时,最有可能对所有人来说最基本的东西并没有被吸收。我遇到了一些我需要理解的 javascript 代码。我添加了一个调试器,这样我就可以逐步完成并希望更好地理解它,但仍然不清楚发生了什么。
var obj = {};
var myID = 999;
var productID = 1;
var myModelID = 100;
var myCatID = 200;
var addMe = 1;
if (typeof obj[myCatID] == 'undefined') {
obj[myCatID] = {};
}
var locationObj = {
state: 'roch',
city: '3',
street: '2nd',
houseNum: '101'
};
var qty = 1;
obj[myCatID][myModelID]={
'location': locationObj,
'quantity': qty,
'prodID': productID,
'id': myID
};
这是怎么回事? obj[myCatID][myModelID] = .关于 obj 的括号表示法中的两个属性的东西?然后给它分配一个对象?只是不清楚我在看什么。
通过我的警报和调试器输出。 !https://imgur.com/gEqonS7
最后,如果我添加一个额外的括号值将 obj[myCatID][myModelID] 更改为 obj[myCatID][myModelID][addMe] 会怎么样?为什么我会收到调试错误,未捕获的类型错误:运行 时无法设置未定义的 属性 '1'?我看不出 [myModelID] 有何不同以及它的声明方式。感谢您帮助我克服这个障碍。
您可以使用括号访问器访问和操作 JavaScript 对象。
var obj = {}; // create an empty object
obj['test'] = 'Hello World'; // add an object property 'test' with content 'Hello World'
console.info(object['test']); // Hello World
console.info(object.test); // Hello World
如您所见,对象 属性 访问可以表示为 obj['propertyName']
或 obj.propertyName
。如果要向对象添加新的 属性,同样适用:obj['newProperty'] = 42
与 obj.newProperty = 42
相同。
现在,如果你想在外部对象中嵌套内部对象,你可以使用多个括号访问器或点来实现:obj['prop1']['prop2']['prop3'] = 42
或 obj.prop1.prop2.prop3 = 42
.
但是:您必须先初始化每个内部对象,然后才能访问它!否则 JavaScript 会说 "Cannot set property of undefined" 因为您尝试访问的实际对象之前从未初始化过。
var obj = {};
obj['prop1'] = {}; // creates an inner object 'prop1'
obj['prop1']['prop2']['prop3'] = 42; // does not work because 'prop2' has never been created as an inner object
在您的示例中,您无法访问 obj[myCatID][myModelID][addMe]
,因为内部对象 "myModelID" 从未被初始化为对象。因此,访问 obj[myCatID][myModelID]
将 return undefined
,因此您将尝试调用 undefined['prop3']
,这会导致错误。
简单的解决方案:检查每个内部对象是否已经初始化。这就是您在 if (typeof obj[myCatID] == 'undefined')
.