为什么我无法将对象添加到数组中? [JavaScript的]

时间:2017-12-12 13:27:10

标签: javascript arrays object firefox-addon

我正在尝试创建一个firefox插件来管理组中的标签。

创建对象数组

我知道数组具有方括号表示法,并且该对象具有花括号表示法。 对象更像是一个python字典而不是java对象,因为它只是一堆键值集(我是对的吗?)。

这是我写的代码:

var groups = [];
var groupcounter = groups.length;

function addTab(tabs) {
    for (var tab of tabs) {
        console.log(tab.url);
        console.log(tab.title);
        groups.push({title: tab.title, url: tab.url});
    }
    groupcounter = groups.length;
    console.log("groups length = "+groups.lenght);
}

function onError(error) {
    console.log(`Error: ${error}`);
}


function addToGroup(){
    browser.tabs.query({currentWindow: true, active: true}).then(addTab,onError);
}

document.addEventListener("click", (e) => {
    if (e.target.textContent === "Add To Group"){
        addToGroup();
    }
});

我期待每次调用addToGroup时,如果Promise然后“调用”了成功函数,我会将一个对象元素插入到groups数组中。

控制台上的打印工作正常,我可以在firefox调试工具控制台上看到正确的输出。

        console.log(tab.url);   // --> prints tab url
        console.log(tab.title); // --> prints tab title

但是当谈到将对象添加到数组时,我总是未定义(我尝试了很多方法)。

    console.log("groups length = "+groups.lenght); //--> prints 'groups length = undefined'

问题和想法

  • 可能是范围问题吗?我知道在函数之外声明变量使它成为全局变量。
  • 我想知道是否可以直接将对象传递给push
  • Javascript对象没有构造函数?

2 个答案:

答案 0 :(得分:3)

我猜错误groups.lenght应为groups.length

答案 1 :(得分:1)

您错误地输入了lenght。它必须是length行:

console.log("groups length = "+groups.lenght);