此代码用于在localStorage中存储数据。如果localStorage还是空的,我想创建一个这样类型的数组:
(Key:)Events (Value:)[{Date: "", Event: "", Participants: "", Description: ""}]
如果还有localStorage中的某些数据,则运行代码 else if else
if (tdAttr) {
var fastDate = tdAttr.getAttribute('data-cell');
var fastEvent = fastAddEvent.value;
var events = JSON.parse(localStorage.getItem('events')) || [];
localStorage.setItem('events', JSON.stringify(events));
var addFastEvent = function () {
if (events.length == 0) {
//JS doesn't see the "events" variable inside this scope
} else if (events.length > 0) {
for (var i = 0; i < events.length; i++) {
if (events[i].Date == fastDate) {
events[i].Event = fastEvent;
events[i].Participants = "";
events[i].Description = "";
};
break;
};
};
localStorage.setItem('events', JSON.stringify(events));
};
addFastEvent();
};
所以,问题#1 :为什么JS没有定义中的 事件 变量 if condition(console.log:
Uncaught TypeError: Cannot read property 'length' of undefined
)?
虽然在之后,如果...... 确实如此。
问题#2: 如何创建数组
(Key:)Events (Value:)[{Date: "", Event: "", Participants: "", Description: ""}]
在第一个 if 条件中? 我试过了
if (events.length == 0) {
var events = [];
arr.push({
Date: fastDate,
Event: fastEvent,
Participants: "",
Description: ""
});
}
但它仍然没有看到变量事件(甚至在 if 条件内),并向我显示错误。
UPD 我成功解决了问题#2 :
if (events.length == 0) {
localStorage['events'] = events.push({
Date: fastDate,
Event: fastEvent,
Participants: "",
Description: ""
});
}
尽管如此,仍然无法理解为什么变量是&#34;隐形&#34;在第一个 if 条件中。让我们说,当条件开始检查时,没有存储的项目,但我理解我的变量
var events = JSON.parse(localStorage.getItem('events')) || [];
像这样 - 我们得到存储的项目,如果没有存储的项目,我们创建一个数组。 似乎JS理解它就像 - 我们得到存储的项目或现有的数组