У меня есть некоторый опыт сборки C / C ++ / PIC и VHDL, но я полностью потерян с javascript.Я создаю одностраничное приложение в React, но этот вопрос важнее для понимания, чем для решения проблемы (поскольку я уже нашел свою проблему).
Мой вопрос в Javascript, когдапеременная массив и когда это объект?Как я могу сказать разницу?(Учитывая, что typeof всегда говорит объект).
В случае, если это кому-нибудь когда-нибудь поможет, моей первоначальной проблемой было то, что в моем состоянии у меня был массив объектов, и мне требовалась длина.Я пытался получить его с помощью Array.length (), но это должен был быть Array.length.За 30 минут, которые я потратил впустую, прежде чем я понял это, у меня появилось больше вопросов.
Это был мой конструктор:
constructor(props, context) {
super(props, context);
this.state = {
activeItem: 'home',
currentSections: [ { key: 'Home', content: 'Home', link: true } ]
};
this.handleItemClick = this.handleItemClick.bind(this);
this.handleTabChange = this.handleTabChange.bind(this);
}
Для контекста я работал над созданием цепочки для приложения.Чтобы определить, нужно ли мне выталкивать последний элемент массива перед добавлением нового, мне нужна длина массива currentSections.
handleTabChange = (e, data) => {
let newSections = [];
newSections = this.state.currentSections;
if (newSections.length() > 2) {
newSections.pop();
}
let newSection = {
key: data.panes[data.activeIndex].name,
content: data.panes[data.activeIndex].menuItem,
link: true
};
newSections.push(newSection);
this.setState({currentSections: newSections});
};
Этот код выдает ошибку: Uncaught TypeError: newSections.length не является функцией
В случае, если вы читаете это, потому что у вас есть похожая проблема, проблема былачто newSections.length () должен быть newSections.length.Я ненавижу себя.Прежде чем я понял это, я почему-то думал, что мой массив в состоянии currentSections на самом деле не является массивом.Что привело меня к моему вопросу, когда массив является массивом в Javascript?Я неправильно понимаю, что возвращает typeof?
let newSections = [];
console.log(typeof newSections); //object
newSections = this.state.currentSections;
console.log(typeof newSections); //object
let newSections = [1,2,3];
console.log(typeof newSections); //object
Я получаю, что массив является объектом, но есть ли способ определить, обрабатывается ли переменная как массив по сравнению с простым объектом?Я не мог найти что-либо обсуждающее это, но это может быть потому, что я не знаю, какие термины искать.